1

DotNetOpenAuthGoogledotnet4.2.2.13055クライアントライブラリでバージョンをにアップグレードしようとしています。そこで、最新のdll(DotNetOpenAuth.Core、DotNetOpenAuth.OAuth2など)をダウンロードしました(NuGetではまだ機能しません)。

新しいバージョンをサポートするために、小さな変更を加えました(client_idとclient_secretを使用してNativeApplcationClientを構築する方法を変更しました)。次に、サンプルリポジトリにあるサンプルを実行しようとしました(例:https ://code.google.com/p/google-api-dotnet-client/source/browse/Tasks.SimpleOAuth2/Program.cs?repo =サンプル)、そして私は次のように悪いリクエストエラーを受け取りました:

 DotNetOpenAuth.Messaging.ProtocolException: Error occurred while sending a direct message or getting the response. --->
 System.Net.WebException: The remote server returned an error: (400) Bad Request.
   at System.Net.HttpWebRequest.GetResponse()
   at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions opt
ions)
   --- End of inner exception stack trace ---
   at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions opt
ions)
   at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request)
   at DotNetOpenAuth.Messaging.Channel.GetDirectResponse(HttpWebRequest webRequest)
   at DotNetOpenAuth.Messaging.Channel.RequestCore(IDirectedProtocolMessage request)
   at DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage requestMessage)
   at DotNetOpenAuth.OAuth2.ClientBase.UpdateAuthorizationWithResponse(IAuthorizationState authorizationState, EndUserAu
thorizationSuccessAuthCodeResponse authorizationSuccess)
   at DotNetOpenAuth.OAuth2.UserAgentClient.ProcessUserAuthorization(IAuthorizationState authorizationState, IDirectedPr
otocolMessage response)
   at DotNetOpenAuth.OAuth2.UserAgentClient.ProcessUserAuthorization(Uri actualRedirectUrl, IAuthorizationState authoriz
ationState)
   at Google.Apis.Authentication.OAuth2.DotNetOpenAuth.NativeApplicationClient.ProcessUserAuthorization(String authCode,
 IAuthorizationState authorizationState) in c:\code.google.com\google-api-dotnet-client\default_oauth2\Src\GoogleApis.Au
thentication.OAuth2\DotNetOpenAuth\NativeApplicationClient.cs:line 102
   at Google.Apis.Samples.TasksOAuth2.Program.GetAuthorization(NativeApplicationClient arg) in c:\code.google.com\google
-api-dotnet-client\samples_oauth2\Tasks.SimpleOAuth2\Program.cs:line 73
   at Google.Apis.Authentication.OAuth2.OAuth2Authenticator`1.LoadAccessToken() in c:\code.google.com\google-api-dotnet-
client\default_oauth2\Src\GoogleApis.Authentication.OAuth2\OAuth2Authenticator.cs:line 124

また、2番目のリクエスト(コードをトークンと交換する場合)にも違いがあることに気付きました。リクエストに承認ヘッダーが追加され、本文にclient_idとclient_secretがありませんでした。

同様のコードが古いバージョンで動作しました-4.0.0.11165、何かが足りませんか?

4

1 に答える 1

2

問題は、新しい DNOA バージョンがデフォルトでクライアントの資格情報を HTTP ヘッダーに入れることをサポートしていることにあるのだろうか。Client クラスを作成し、別のクライアント資格情報プロバイダーをコンストラクターに渡すと、うまくいく場合があります。

動作を HTTP Authorization ヘッダーの使用から POST エンティティでのクライアント資格情報の受け渡しに戻すには、これをパラメーターとしてコンストラクターに渡す ClientBase 派生クラスをインスタンス化します。

ClientCredentialApplicator.PostParameter(clientSecret)
于 2013-03-05T05:23:13.557 に答える