1

コードを新しいスコープに更新する際に問題が発生しました。現在私は使用userinfo.profileしており、すべて正常に動作します。

Google+ OAuth 2.0 スコープによると、新しいplus.meスコープにより、アプリケーションはユーザーが誰であるかを知ることができ、plus.login追加のアクセス (年齢、言語、サークルなど) も付与されます。

-に置き換えるuserinfo.profileと、plus.meすべて正常に機能します。メソッドWebServerClient.RequestUserAuthorizationはユーザーを承認ProcessUserAuthorizationし、トークンを提供します。

しかし、代わりにスコープを尋ねると、plus.loginGoogle は追加のクエリ パラメータをコールバックに追加し、次の呼び出しは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_urlparamに転送されます。

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 仕様では、承認応答には paramscodestateが必要であり、他のパラメーターの追加について注意が必要であると述べています。しかし、それはまた言います

クライアントは、認識されていない応答パラメーターを無視する必要があります

これは 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
4

0 に答える 0