Youtube API Windows 服务器上的 v3 OAuth2 握手错误 "connection failed"
Youtube API v3 OAuth2 handshake error "connection failed" on Windows server
我们想结合使用 Youtube v3 API 和 ASP.NET 4.5/C# 通过控制台应用程序将视频上传到特定的 youtube 频道。编译是在 Visual Studio 2015 年 Windows 7 Professional Development 机器上完成的。
所以我们在 Google 开发者控制台中创建了 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
);
}
到目前为止一切正常。如果之前没有授权,浏览器 windows 打开 (access_type=offline&response_type=code) 我们可以在其中登录我们的 Youtube 帐户,select 一个频道,授予必要的访问权限,返回浏览器页面 localhost:portnumber/authorize?code=XYZ 其中写着“收到验证码。您可以关闭此 windows",我们的控制台应用程序将继续其工作。这是我们开发机器上的工作流程。
但是,当我们将应用程序复制到Windows Server 2012 时,出现错误。浏览器 window 也打开了,我们可以登录并授予访问权限,但是最终浏览器页面 localhost:portnumber/authorize?code=XYZ 加载失败特定于浏览器的“连接失败”错误页面。
似乎没有进程附加到(随机?)端口号来读取接收到的代码信息、检索令牌并将其写入 %AppData%/Google.Apis.Auth。防火墙不阻止任何东西。
我们的第一个猜测是名称解析问题。默认情况下,localhost 在 Windows 服务器上解析为 ::1。不幸的是,当我们强制将 IPv4 解析为 127.0.0.1
时它仍然不起作用
感谢您的每一个建议。
好的,我找到了解决方案。
我们已将 IIS8 绑定到特定 IP 地址,不包括 127.0.0.1。
在我们通过 netsh http add iplisten 添加本地 IP 地址后,网络服务器能够再次绑定到本地主机套接字以进行基于一次性代码的授权。
我们想结合使用 Youtube v3 API 和 ASP.NET 4.5/C# 通过控制台应用程序将视频上传到特定的 youtube 频道。编译是在 Visual Studio 2015 年 Windows 7 Professional Development 机器上完成的。
所以我们在 Google 开发者控制台中创建了 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
);
}
到目前为止一切正常。如果之前没有授权,浏览器 windows 打开 (access_type=offline&response_type=code) 我们可以在其中登录我们的 Youtube 帐户,select 一个频道,授予必要的访问权限,返回浏览器页面 localhost:portnumber/authorize?code=XYZ 其中写着“收到验证码。您可以关闭此 windows",我们的控制台应用程序将继续其工作。这是我们开发机器上的工作流程。
但是,当我们将应用程序复制到Windows Server 2012 时,出现错误。浏览器 window 也打开了,我们可以登录并授予访问权限,但是最终浏览器页面 localhost:portnumber/authorize?code=XYZ 加载失败特定于浏览器的“连接失败”错误页面。
似乎没有进程附加到(随机?)端口号来读取接收到的代码信息、检索令牌并将其写入 %AppData%/Google.Apis.Auth。防火墙不阻止任何东西。
我们的第一个猜测是名称解析问题。默认情况下,localhost 在 Windows 服务器上解析为 ::1。不幸的是,当我们强制将 IPv4 解析为 127.0.0.1
时它仍然不起作用感谢您的每一个建议。
好的,我找到了解决方案。
我们已将 IIS8 绑定到特定 IP 地址,不包括 127.0.0.1。
在我们通过 netsh http add iplisten 添加本地 IP 地址后,网络服务器能够再次绑定到本地主机套接字以进行基于一次性代码的授权。