首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对google进行身份验证或向app发出问题

对google进行身份验证或向app发出问题
EN

Stack Overflow用户
提问于 2019-06-12 22:58:41
回答 2查看 920关注 0票数 1

所以,只是提醒一下,这是我第一次使用google的apis和开发者控制台,所以请原谅我忽略了一个经验丰富的google开发人员认为是常识的显而易见的东西。这么说吧。我正在尝试创建一个安装的应用程序,它将上传一个视频到我的帐户下的youtube。我正在用powershell编写应用程序,所以当脚本启动时,我将导入适当的.Net库。从这里开始,我基本上使用了这里的示例,并将内容转换为powershell:

代码语言:javascript
复制
Add-Type -AssemblyName mscorlib
Add-Type -AssemblyName System.Net.Http
Add-Type -AssemblyName System
Add-Type -AssemblyName System.Core
Add-Type -AssemblyName System.Numerics
Add-Type -AssemblyName System.Xml
Add-Type -AssemblyName System.Xml.Linq
Add-Type -AssemblyName System.Data
Add-Type -AssemblyName System.Runtime.Serialization
#the below command imports the following assemblies: Google.Apis.Auth.dll, Google.Apis.Auth.PlatformServices.dll, Google.Apis.Core.dll, Google.Apis.dll, Google.Apis.PlatformServices.dll, Google.Apis.YouTube.v3.dll
Get-ChildItem 'C:\Users\whiggs\Documents\SAPIEN\PowerShell Studio\Projects\youtube\*.dll' | % {[reflection.assembly]::LoadFrom($_.FullName)}
$vid = "C:\Users\whiggs\Documents\gery2.mp4"
#$file = [System.IO.File]::OpenRead("C:\Users\whiggs\Documents\SAPIEN\PowerShell Studio\Projects\youtube\client_id.json")
$filemode = [System.IO.FileMode]::Open
        $fileaccess = [System.IO.FileAccess]::Read
        $stream = New-object System.IO.FileStream -ArgumentList "C:\Users\whiggs\Documents\SAPIEN\PowerShell Studio\Projects\youtube\client_secret.json", $filemode, $fileaccess
        $googlebroker = New-object Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker
        $thing = [Google.Apis.Auth.OAuth2.GoogleClientSecrets]::Load($stream)
        [string[]]$scope = [Google.Apis.YouTube.v3.YouTubeService+ScopeConstants]::YoutubeUpload
        #$scope = [Google.Apis.YouTube.v3.YouTubeService+Scope]::YoutubeUpload
        $cancellation = [System.Threading.CancellationToken]::None
        $googlebroker = [Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker]::AuthorizeAsync($thing.Secrets, $scope, "<google_username>", $cancellation)
        $googlebroker.Wait()
        [Google.Apis.Auth.OAuth2.UserCredential]$cred = $googlebroker.Result
        $baseclient = new-object Google.Apis.Services.BaseClientService+Initializer
        $baseclient.HttpClientInitializer = $cred
        $baseclient.ApplicationName = "Contacts Tool"
        $service = New-Object Google.Apis.YouTube.v3.YouTubeService($baseclient)
        $video = New-Object Google.Apis.YouTube.v3.Data.Video
        $video.Snippet = New-Object Google.Apis.YouTube.v3.Data.VideoSnippet
        $video.Snippet.Title = "test"
        $video.Snippet.Description = "none"
        $video.Status = New-Object Google.Apis.YouTube.v3.Data.VideoStatus
        $video.Status.PrivacyStatus = "public"
        $vidstream = New-Object System.IO.FileStream -ArgumentList $vid, $filemode
        $request = $service.Videos.Insert($video, "public", $vidstream, "video/*")
        $task = $request.UploadAsync()
        $task.Wait()
        $vidstream.close()
        $vidstream.Dispose()

不需要真正包含代码,因为我知道它是正确编写的,因为没有异常是生成的。当我运行上面的代码时,它在没有生成异常的情况下运行到完成,但是如果我查看存储在$task中的对象(类型为System.Threading.Tasks.Task),当整个对象报告它运行到完成时,深入挖掘对象的“结果”属性会揭示实际失败的任务,进一步深入研究“异常”属性会提供以下错误消息:

代码语言:javascript
复制
The service youtube has thrown an exception: Google.GoogleApiException: Google.Apis.Requests.RequestError
Access Not Configured. YouTube Data API has not been used in project <snip> before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/youtube.googleapis.com/overview?project=<snip> then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. [403]
Errors [
    Message[Access Not Configured. YouTube Data API has not been used in project <snip> before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/youtube.googleapis.com/overview?project=<snip> then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.] Location[ - ] Reason[accessNotConfigured] Domain[usageLimits]
]

   at Google.Apis.Upload.ResumableUpload`1.<InitiateSessionAsync>d__25.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Google.Apis.Upload.ResumableUpload.<UploadAsync>d__70.MoveNext()

因此,很明显,应用程序的配置或我对其身份验证的方式存在某种问题。不过,我知道应用程序至少收到了请求,正如您可以看到的这里。因此,在进行这些研究后,我对问题可能是什么有几个有根据的猜测,并需要对以下问题提供一些投入:( a)哪些(如果有的话)是实际问题;( b)需要做些什么来纠正问题。我第一次熟悉的猜测涉及到传递给Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker类的"AuthorizeAsync“方法的参数。根据文档:“在此示例代码中,通过调用GoogleWebAuthorizationBroker.AuthorizeAsync方法创建一个新的UserCredential实例。该静态方法获取客户端机密(或客户端机密的流)、所需的作用域、用户标识符、取消操作的取消令牌以及可选的数据存储。如果未指定数据存储,则默认为带有默认Google.Apis.Auth文件夹的FileDataStore。文件夹是在Environment.SpecialFolder.ApplicationData中创建的。”

在上述语句中,我要重点讨论的部分是“用户标识符”,因为这是为该参数的描述提供的所有信息。我输入的值是一个字符串,其中包含应用程序注册的google帐户的用户名和上传youtube视频的帐户,但我不知道这是否是需要的值,因为作为此过程的一部分,我必须通过web浏览器登录帐户。如果这确实是问题所在,那么就这个参数而言,什么是“用户标识符”?文档中的更多细节可以起到很大作用。我第二个熟悉的猜测是什么导致了这与应用程序的配置有关,但更具体地说,是生成的oauth凭据。应用程序需要访问的范围显然被认为是敏感的,如果我正确理解了这一点,我必须从一个经过验证的域进行身份验证,并配置一些高级设置,而这些设置是为自己而不是为公司编写的,我只是无法访问这些设置。我只想上传一个youtube视频到我的帐户,那么为什么我需要认证从一个验证域?我该怎么做才能避开这一切?任何信息都会很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-18 09:05:30

纠正你理解中的错误

"<google_username>"由文件存储库使用,一旦用户同意访问您的客户端,就会为用户存储数据仓库。如果您想更多地了解这一点,那么您应该尝试阅读我关于文件数据存储的教程。

代码语言:javascript
复制
$googlebroker = [Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker]::AuthorizeAsync($thing.Secrets, $scope, "<google_username>", $cancellation)

回答你的问题

以前没有在项目中使用过YouTube数据API,或者已经禁用过它。

这意味着您还没有在YouTube上的项目中启用控制台 api,或者您还没有向该api应用和授予任何配额。在控制台中,转到API Library -> YouTube数据API v3并启用它。完成该操作后,单击“管理”,然后转到“配额”。如果您以前没有启用它,而我怀疑您没有启用它,那么现在您将有0个配额。

单击“阴茎”图标并申请此api的配额。可能需要一段时间才能得到回应。

票数 1
EN

Stack Overflow用户

发布于 2019-06-13 03:35:11

该错误消息仅仅意味着您还没有在云控制台中启用API。在启用API之后,您能发布收到的错误消息吗?此外,请确保您正在运行具有正确项目凭据的脚本。您可以运行glcoud config list来查看您正在使用的项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56571352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档