0

Google API for .NETを使用しています。サンプル プロジェクトSimple OAuth2に従っていますが、DotNetOpenAuth からプロトコル例外が発生し続けます。

これが私が今持っているものです:

public static void Main( string[] args )
{
   // Register the authenticator.
   NativeApplicationClient provider = new NativeApplicationClient(
      GoogleAuthenticationServer.Description, gaAppId, gaSecret );
   OAuth2Authenticator<NativeApplicationClient> auth = new OAuth2Authenticator<NativeApplicationClient>(
      provider, GetAuthorization );

   AnalyticsService analyticsService =
      new AnalyticsService( new BaseClientService.Initializer {
         Authenticator = auth,
         ApplicationName = @"Test Application",
      } );
   DataResource.GaResource.GetRequest request = analyticsService.Data.Ga.Get(
      gaId, @"2013-09-04", @"2013-09-18", "ga:totalEvents" );
   GaData data = request.Execute();

   Console.ReadKey();
}

private static IAuthorizationState GetAuthorization( NativeApplicationClient arg )
{
   // Get the auth URL:
   IAuthorizationState state =
      new AuthorizationState( new[] {AnalyticsService.Scopes.AnalyticsReadonly.GetStringValue()} );
   state.Callback = new Uri( NativeApplicationClient.OutOfBandCallbackUrl );

   // Retrieve the access token by using the authorization code:
   return arg.ProcessUserAuthorization( authCode, state );
}

注: このコードで Analytics API を使用しているのは、それが必要だからです。サンプルで説明されているように Tasks API を使用すると、同じエラーが発生します。

認証コードは、コード例で定義されているプロセスによって生成される更新トークンです。エラーは両方の場合に発生します (新しいトークンを要求するか、古いトークンを再利用します)。

accounts.google.com がエラーを返すため、DotNetOpenAuth によってトリガーされる ProtocolException があります: 無効な要求です。

OAuth リクエストは次のようになります。

Aplication/x-www-form-urlencoded; charset=utf-8
User-Agent: DotNetOpenAuth/4.3.1.13153
Host: accounts.google.com
Cache-Control: no-store,no-cache
Pragma: no-cache
Content-Length: 148
Connection: Keep-Alive

code=REDACTED&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&grant_type=authorization_code

そして、これはGoogleが返すものです:

HTTP/1.1 400 Bad Request
IRRELEVANT_HEADERS
{
  "error" : "invalid_request"
}

なぜこれが起こったのか、どうすれば解決できるのか、ここで少し途方に暮れています。他に動作する C# の例が見つかりません。このスレッドのエラーとは別の種類のエラーのようです。これを修正する方法を知っている人はいますか?

4

1 に答える 1