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に「 Received validation code. You may close this windows 」と書かれており、コンソール アプリケーションは動作を続けます。これは、開発マシンでの作業ワークフローです。
ただし、アプリケーションを Windows Server 2012 にコピーすると、エラーが発生します。ブラウザ ウィンドウも開き、ログインしてアクセス権を付与できますが、最終的なブラウザ ページlocalhost:portnumber/authorize?code=XYZは、ブラウザ固有の「接続に失敗しました」というエラー ページでロードできません。
受信したコード情報を読み取り、トークンを取得し、それを %AppData%/Google.Apis.Auth に書き込むプロセスが (ランダム?) ポート番号に関連付けられていないようです。ファイアウォールは何もブロックしません。
私たちの最初の推測は、名前解決の問題でした。デフォルトでは、localhost は Windows サーバー上で ::1 に解決されました。残念ながら、IPv4 解決を強制的に 127.0.0.1 にすると、まだ機能しません。
すべての提案に感謝します。