コードを新しいスコープに更新する際に問題が発生しました。現在私は使用userinfo.profile
しており、すべて正常に動作します。
Google+ OAuth 2.0 スコープによると、新しいplus.me
スコープにより、アプリケーションはユーザーが誰であるかを知ることができ、plus.login
追加のアクセス (年齢、言語、サークルなど) も付与されます。
-に置き換えるuserinfo.profile
と、plus.me
すべて正常に機能します。メソッドWebServerClient.RequestUserAuthorization
はユーザーを承認ProcessUserAuthorization
し、トークンを提供します。
しかし、代わりにスコープを尋ねると、plus.login
Google は追加のクエリ パラメータをコールバックに追加し、次の呼び出しはWebServerClient.ProcessUserAuthorization
失敗します。これは、実装が現在の rul を使用して新しい を作成しredirect_url
、「既知の」パラメータをストライピングし、「新しい未知の」Google パラメータを残すためです。これは、Google Api コンソールに登録されているものと一致せredirect_url
ず、Google サーバーは 400 応答を返します。
これは、スコープ付きの承認からの成功応答ですplus.me
(NetOpenAuth.Messaging.Channel ログから):
Incoming HTTP request: GET http://localhost:40004/Me/LoginComplete?from=Google&state=TWXf6Zq3XYSlwyfCDt3GiQ&code=4/qC_KeuiykcVm1sayIyEdnBjiklxz.AoMfk5TqaXQcsNf4jSVKMpY-GxwThAI
After binding element processing, the received EndUserAuthorizationSuccessAuthCodeResponse (2.0) message is:
code: 4/qC_KeuiykcVm1sayIyEdnBjiklxz.AoMfk5TqaXQcsNf4jSVKMpY-GxwThAI
state: TWXf6Zq3XYSlwyfCDt3GiQ
from: Google
plus.login
そして、ここに(成功した)スコープ付きの承認応答があります:
Incoming HTTP request: GET http://localhost:40004/Me/LoginComplete?from=Google&state=26R-O3YN6u3-5EKIlJzFFw&code=4/zOoeVq8vec068x2-CyPq4PjPNtRT.osemzp8Zl7sQsNf4jSVKMpbcmWQThAI&authuser=0&prompt=consent&session_state=27ca4bd2e70d0721bc1fa781b900a558e59fe4c7..d409
After binding element processing, the received EndUserAuthorizationSuccessAuthCodeResponse (2.0) message is:
code: 4/zOoeVq8vec068x2-CyPq4PjPNtRT.osemzp8Zl7sQsNf4jSVKMpbcmWQThAI
state: 26R-O3YN6u3-5EKIlJzFFw
from: Google
authuser: 0
prompt: consent
session_state: 27ca4bd2e70d0721bc1fa781b900a558e59fe4c7..d409
トークンの呼び出し (plus.me
スコープ用) は成功します。
Prepared outgoing AccessTokenAuthorizationCodeRequestC (2.0) message for https://accounts.google.com/o/oauth2/token:
code: 4/qC_KeuiykcVm1sayIyEdnBjiklxz.AoMfk5TqaXQcsNf4jSVKMpY-GxwThAI
redirect_uri: http://localhost:40004/Me/LoginComplete?from=Google
grant_type: authorization_code
client_id: 175802076419.apps.googleusercontent.com
client_secret: ********
ただし、plus.login
スコープ 3 の新しいパラメーター (authuser、prompt、session_state) はredirect_url
paramに転送されます。
Prepared outgoing AccessTokenAuthorizationCodeRequestC (2.0) message for https://accounts.google.com/o/oauth2/token:
code: 4/zOoeVq8vec068x2-CyPq4PjPNtRT.osemzp8Zl7sQsNf4jSVKMpbcmWQThAI
redirect_uri: http://localhost:40004/Me/LoginComplete?from=Google&authuser=0&prompt=consent&session_state=27ca4bd2e70d0721bc1fa781b900a558e59fe4c7..d409
grant_type: authorization_code
client_id: 175802076419.apps.googleusercontent.com
client_secret: ********
そして、この redirect_url が登録済みと一致しないとすぐに、エラーが発生します。
https://accounts.google.com/o/oauth2/token returned 400 BadRequest: Bad Request
OAuth2 仕様では、承認応答には paramscode
とstate
が必要であり、他のパラメーターの追加について注意が必要であると述べています。しかし、それはまた言います
クライアントは、認識されていない応答パラメーターを無視する必要があります
これは DNOA の問題であり、Google の問題ではないということですか?
DNOA は null 許容の responseUri パラメータを ProcessUserAuthorization に追加し、現在の URL から推測する代わりにそれを使用する必要があるかもしれません...
最も簡単な回避策は何ですか (Google ライブラリの使用を除く)?
アップデート:
/oauth の元の要求は次のとおりです。
Prepared outgoing EndUserAuthorizationRequestC (2.0) message for https://accounts.google.com/o/oauth2/auth:
client_id: 175802076419.apps.googleusercontent.com
redirect_uri: http://localhost:40004/Me/LoginComplete?from=Google
state: TWXf6Zq3XYSlwyfCDt3GiQ
scope: https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.me
response_type: code