YouTube V3 API を使用してビデオ ビュー カウント データを取得するコンソール アプリがあります。認証に Oauth 2 を使用していますが、問題があります。
異なる時間に 2 つの異なるサーバーでアプリケーションを実行しました。
1 台のマシンが正常に認証され、ログから次のメッセージが返されます。
2013-05-08 09:51:45,691 [8] INFO DotNetOpenAuth.Messaging.Channel - Prepared outgoing AccessTokenRefreshRequest (2.0) message for https://accounts.google.com/o/oauth2/token:
refresh_token: 1/m4PJx978kbEGkQTf6tvSJdFCzej1Na6NBTakhhHQKjs
grant_type: refresh_token
client_id: 1085346326111.apps.googleusercontent.com
client_secret: HHH5WFqTRdXMl54rNZaUghNa
もう一方は正常に認証されず、ユーザーに代わって YouTube Data API リクエストを送信する許可を待っていると想定しています。
2013-05-08 09:44:59,442 [31] INFO DotNetOpenAuth.Messaging.Channel - https://accounts.google.com/o/oauth2/authの発信 EndUserAuthorizationRequest (2.0) メッセージを準備しました: response_type: コード client_id: 1085346326111 .apps.googleusercontent.com redirect_uri: サーバー ローカル ホスト パス スコープ: https://www.googleapis.com/auth/youtube.readonly
両方のサーバーが同じコード、同じ clientID、および同じ秘密鍵を使用しているという事実に基づいて、アプリが 1 つのサーバーで認証できない理由を誰か説明してもらえますか?
ここに私のコードのスニペットがあります:
プライベートボイド Oauth2Authenticate() {
try
{
var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description)
{
ClientIdentifier = ConfigurationManager.AppSettings["Client.Id"],
ClientSecret = ConfigurationManager.AppSettings["Client.Secret"]
};
var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
youtube = new YoutubeService(new BaseClientService.Initializer()
{
Authenticator = auth
});
}
catch (Exception e)
{
if (logger != null)
logger.Error(string.Format("Error authenticating Aplication on YouTube authentiction server", e.Message), e);
}
}
private static IAuthorizationState GetAuthorization(NativeApplicationClient client)
{
var storage = MethodBase.GetCurrentMethod().DeclaringType.ToString();
var key = "storage_key";
IAuthorizationState state = AuthorizationMgr.GetCachedRefreshToken(storage, key);
if (state != null)
{
client.RefreshToken(state);
}
else
{
state = AuthorizationMgr.RequestNativeAuthorization(client, YoutubeService.Scopes.YoutubeReadonly.GetStringValue());
AuthorizationMgr.SetCachedRefreshToken(storage, key, state);
}
return state;
}