用户登录
用户注册

分享至

GoogleWebAuthorizationBroker.AuthorizeAsync 挂起

  • 作者: 亖呉?盀
  • 来源: 51数据库
  • 2022-10-20

问题描述

我们的网站需要从后面的代码(asp.net mvc 应用程序)上传视频到youtube.我正在尝试获取 google 凭据,但是当我调用 AuthorizeAsync 时,应用程序只是挂起.我四处寻找解决方案,但似乎没有任何帮助.我已经在谷歌和堆栈溢出上搜索过明显的.我发现的大部分内容都提到该应用程序可能无法访问 appdata 文件夹,因此我尝试将该文件夹更改为位于 c 驱动器、d 驱动器和实际 inetpub 位置中.我测试并发现我能够让应用程序写入这些位置.

Our website needs to upload videos to youtube from the code behind (asp.net mvc application). I'm trying to get the google credentials, but when i call the AuthorizeAsync, the application just hangs. I've looked all over for a solution and none seem to help out. I've already searched for the obvious on google and stack overflow. most of what i found mentioned that the application might not have access the the appdata folder, so i tried changing the folder to be in the c drive, d drive and in the actual inetpub location. i tested and found i was able to have the application write to those locations.

更具体地说,用户是我们的管理员,客户上传视频给我们,管理员批准.当管理员批准它们时,它会发布在我们的 youtube 帐户上.管理员无需执行任何操作,只需单击批准"按钮即可.

to be more specific, the user is our *****, customers upload videos to us, and the ***** approves them. when the ***** approves them, it is posted on our youtube account. the ***** should not have to do anything but click the approve button.

为了使这成为一个实际问题,我该怎么做才能通过 AuthorizeAsync?如果您需要更多信息,请告诉我

To make this an actual question, what can i do to get past the AuthorizeAsync? Let me know if you need more info

        UserCredential credential;
        GoogleWebAuthorizationBroker.Folder = "YouTube.Auth.Store";
        using (var stream = new FileStream(CredentialsPath, FileMode.Open,
                             FileAccess.Read))
        {
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                // This OAuth 2.0 access scope allows an application to upload files to the
                // authenticated user's YouTube channel, but doesn't allow other types of access.
                new[] { YouTubeService.Scope.YoutubeUpload },
                "user",
                CancellationToken.None,
                new FileDataStore("YouTube.Auth.Store")
            ).Result;
        }

推荐答案

找到了解决这个问题的方法.

Found a way to get passed this.

我改用了 GoogleAuthorizationCodeFlow.结果是这样的:

I used GoogleAuthorizationCodeFlow instead. this is what it turned out to look like:

        ClientSecrets secrets = new ClientSecrets()
        {
            ClientId = CLIENT_ID,
            ClientSecret = CLIENT_SECRET
        };

        var token = new TokenResponse { RefreshToken = REFRESH_TOKEN }; 
        var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
            new GoogleAuthorizationCodeFlow.Initializer 
            {
                ClientSecrets = secrets
            }), 
            "user", 
            token);

        var service = new YouTubeService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credentials,
            ApplicationName = "TestProject"
        });
软件
前端设计
程序设计
Java相关