2

GoogleアカウントでのoAuth2認証にgoogle-api-java-clientバージョン1.8-betaを使用しています。アクセストークンはあるが更新トークンはないGoogleTokenResponseオブジェクトを取得するまでは、すべて問題ありません。リクエストURLを作成するには、次の方法を使用します。

...
    googleAuthenticationUrl = new GoogleAuthorizationCodeRequestUrl(CLIENT_ID, callBackUrl, scopes).build();
...

リクエストトークンを取得するとき、次の行のアクセストークンと交換します。

...
GoogleTokenResponse tokenResponse =  new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(), new JacksonFactory(), CLIENT_ID, CLIENT_SECRET, request.getParameter(CODE_URL_PARAM), callBackUrl).execute();
...

返されたGoogleTokenResponseオブジェクトには、更新トークンが含まれていません。

{"access_token":"ya29.AH..etc...9-Y","expires_in":3600,"token_type":"Bearer"}

この問題に光を当てていただけませんか。ご助力ありがとうございます!

4

3 に答える 3

5

リクエストURLを作成するときは、アクセスタイプを設定する必要があります。

requestUrl = new GoogleAuthorizationCodeRequestUrl(googleClientId, callBackUrl, scopes)
    .setApprovalPrompt("force") // needed if user already granted permission
    .setAccessType("offline")
    .build();

このページで説明されているように、このパラメータの設定をお勧めします。

[...] access_typeパラメーターを明示的にofflineに設定することをお勧めします。これは、online値が導入されると、それがデフォルトの動作になると予想されるためです。これにより、アプリケーションがアクセストークンを更新できるようになる方法に影響を与えるため、アプリケーションに予期しない変更が発生する可能性があります。パラメータ値を明示的にオフラインに設定することで、アプリケーションの機能の変更を回避できます。[...]

于 2012-04-25T09:52:33.790 に答える
2

PapelPincelの回答に加えて、更新トークンを取得するには、.Netリリース1.8.1.970を使用して承認プロンプトを強制する必要がありました。例えば

var authReq = new GoogleAuthorizationCodeRequestUrl(new Uri(GoogleAuthConsts.AuthorizationUrl)) { 
    RedirectUri = Callback, 
    ClientId = ClientId, 
    AccessType = "offline", 
    Scope = string.Join(" ", new[] { Scopes... }), 
    ApprovalPrompt = "force" 
}; 
于 2014-03-20T14:47:44.923 に答える
0

Google検索からここにアクセスする人にとって、私は純粋なサーバーサイドフローを使用していなかったので、このドキュメントのようにjavascriptを介して認証トークンを取得していました。@PapelPincelの回答は私にとってヒントでした。

次のスニペットのように、ボタンにdata-accesstype="offline"を追加する必要があります。

例:

          <span
            data-accesstype="offline"
            class="g-signin"
            data-callback="signinCallback"
            data-clientid="CLIENT_ID"
            data-redirecturi="postmessage"
            data-cookiepolicy="single_host_origin"
            data-requestvisibleactions="http://schemas.google.com/AddActivity"
            data-scope="https://www.googleapis.com/auth/plus.login">
          </span>
于 2014-04-26T20:19:43.010 に答える