0

我们希望结合 ASP.NET 4.5/C# 使用 Youtube v3 API 通过控制台应用程序将视频上​​传到特定的 youtube 频道。编译是在 Windows 7 专业开发机器上的 Visual Studio 2015 中完成的。

因此,我们在 Google Developer Console 中创建了 OAuth2 凭据,并使用以下代码进行 OAuth2 授权握手

        using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
        {
            GoogleAuthorizationCodeFlow.Initializer initializer = new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = GoogleClientSecrets.Load(stream).Secrets,
                DataStore = new FileDataStore(GoogleWebAuthorizationBroker.Folder)
            };

            credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                initializer,

                new[] { YouTubeService.Scope.Youtube },
                user,
                CancellationToken.None
            );
        }

到目前为止一切正常。如果之前没有授权,则会打开一个浏览器窗口(access_type=offline&response_type=code),我们可以在其中登录我们的 Youtube 帐户,选择一个频道,授予必要的访问权限,然后返回浏览器页面localhost:portnumber/authorize?code= XYZ写着“收到验证码。您可以关闭此窗口”,我们的控制台应用程序继续工作。这是我们开发机器上的工作流程。

但是,当我们将应用程序复制到 Windows Server 2012 时,会发生错误。浏览器窗口也会打开,我们可以登录并授予访问权限,但最终浏览器页面localhost:portnumber/authorize?code=XYZ无法加载浏览器特定的“连接失败”错误页面。

似乎没有进程附加到(随机?)端口号来读取接收到的代码信息、检索令牌并将其写入 %AppData%/Google.Apis.Auth。防火墙不会阻止任何东西。

我们的第一个猜测是名称解析问题。默认情况下,localhost 在 Windows 服务器上被解析为 ::1。不幸的是,当我们将 IPv4 分辨率强制为 127.0.0.1 时,它仍然不起作用

感谢您的每一个建议。

4

1 回答 1

0

好的,我找到了解决方案。

我们已经将 IIS8 绑定到一个特定的 IP 地址,不包括 127.0.0.1。

在我们通过netsh http add iplisten添加本地 IP 地址后,网络服务器能够再次绑定到 localhost 套接字以进行基于代码的一次性授权。

于 2016-03-08T12:34:13.503 回答