【发布时间】:2016-06-20 19:34:54
【问题描述】:
我们希望将 Youtube v3 API 与 ASP.NET 4.5/C# 结合使用,通过控制台应用程序将视频上传到特定的 youtube 频道。编译是在 Windows 7 Professional Development 机器上的 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 无法加载,并显示特定于浏览器的“connection failed ”错误页面。
似乎没有进程附加到(随机?)端口号来读取接收到的代码信息、检索令牌并将其写入 %AppData%/Google.Apis.Auth。防火墙不会阻止任何东西。
我们的第一个猜测是名称解析问题。默认情况下,localhost 在 Windows 服务器上被解析为 ::1。不幸的是,当我们将 IPv4 分辨率强制为 127.0.0.1 时,它仍然不起作用
感谢您的每一个建议。
【问题讨论】:
标签: c# asp.net google-data-api youtube-data-api oauth2