web-dev-qa-db-ja.com

Google Drive APIを介してリフレッシュトークンを使用してアクセストークンを生成する方法は?

承認の手順を完了し、アクセストークンと更新トークンを取得しました。

GoogleドライブAPIで保存した更新トークンを使用してアクセストークンを生成するには、次に何をすればよいですか?

Force.comで作業しているため、sdkを使用することはできませんので、APIを使用して直接実装する方法を提案してください。

50
Niranja

自分で実装したい場合は、WebサーバーアプリケーションのOAuth 2.0フローが https://developers.google.com/accounts/docs/OAuth2WebServer に文書化されています、特に、更新トークンの使用に関するセクションを確認する必要があります。

https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

28

Web APIを使用している場合は、http POSTをURLに呼び出す必要があります:https://www.googleapis.com/oauth2/v4/token次のリクエスト本文

client_id: <YOUR_CLIENT_ID>
client_secret: <YOUR_CLIENT_SECRET>
refresh_token: <REFRESH_TOKEN_FOR_THE_USER>
grant_type: refresh_token

更新トークンは期限切れにならないため、何度でも使用できます。応答は次のようなJSONになります。

{ access_token: 'ya....', token_type: 'Bearer', expires_in: 3599 }
24
Ashutosh Singh

これは古い質問ですが、完全には答えられていないようです。この情報も必要なので、答えを投稿します。

Google Api Client Libraryを使用する場合は、更新トークンを含むアクセストークンが必要です。1時間後にアクセストークンの有効期限が切れても、ライブラリはトークンを更新します自動的に。

更新トークンでアクセストークンを取得するには、オフラインアクセスタイプ(PHPの場合:$client->setAccessType("offline");など)を要求するだけで取得できます。更新トークンを含むアクセストークンは最初の認証でのみ取得されるため、最初にそのアクセストークンを保存して、いつでも使用できるようにしてください。

それが誰にも役立つことを願っています:-)

21
amosmos

Javaを使用する場合、以下のコードスニペットに従ってください。

GoogleCredential refreshTokenCredential = new GoogleCredential.Builder().setJsonFactory(JSON_FACTORY).setTransport(HTTP_TRANSPORT).setClientSecrets(CLIENT_ID, CLIENT_SECRET).build().setRefreshToken(yourOldToken);
refreshTokenCredential.refreshToken(); //do not forget to call this
String newAccessToken = refreshTokenCredential.getAccessToken();
2

POST/oauth2/v4/token

ホスト:www.googleapis.com

ヘッダー

コンテンツの長さ:163

コンテンツタイプ:application/x-www-form-urlencoded

RequestBody

client_secret = ************&grant_type = refresh_token&refresh_token = sasasdsa1312dsfsdf&client_id = ************

1
Gaurav Bahl

私がそれを理解するのに1時間を費やしたので、それが誰にも役立つ場合に備えて、私の答えを投稿するだけです:)

まず、Google APIに関連する2つの非常に役立つリンクと、Googleサービスのいずれかからのデータの取得:

https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/web-php

https://developers.google.com/identity/protocols/OAuth2WebServer

さらに、次の方法を使用する場合:

$client->setAccessToken($token)

_$token_は、オブジェクト内で取得する_access_token_だけでなく、承認リクエストを行うときにGoogleから返される完全なオブジェクトである必要があります。

{"access_token": "xyz"、 "token_type": "Bearer"、 "expires_in":3600、 "refresh_token": "mno"、 "created":1532363626}

次に与える必要があります:

$client->setAccessToken('{"access_token":"xyz","token_type":"Bearer","expires_in":3600,"refresh_token":"mno","created":1532363626}')

ない

$client->setAccessToken('xyz')

そして、たとえ_access_token_が期限切れになったとしても、Googleは_refresh_token_オブジェクトで_access_token_を使用してそれを更新します。

1
Learner

あなたがする必要があるのは以下のような投稿リクエストです:-

POST https://www.googleapis.com/oauth2/v4/token
Content-Type: application/json

{
  "client_id": <client_id>,
  "client_secret": <client_secret>,
  "refresh_token": <refresh_token>,
  "grant_type": "refresh_token"
}
1
Raad Altaie

ASP.Net Post呼び出しを使用すると、これはうまくいきました。

StringBuilder getNewToken = new StringBuilder();
getNewToken.Append("https://www.googleapis.com/oauth2/v4/token");                        
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(getNewToken.ToString());
                    var values = new Dictionary<string, string>
                    {
                        { "client_id", <Your Client Id> },
                        { "client_secret", <Your Client Secret> },
                        { "refresh_token", <Your Saved Refresh Token> },
                        { "grant_type", "refresh_token"}
                    };

                    var content = new FormUrlEncodedContent(values);
                    var response = await client.PostAsync(getNewToken.ToString(), content);
0