認証の手順を完了し、アクセス トークンとリフレッシュ トークンを取得しました。
Google ドライブ API 経由で保存した更新トークンを使用してアクセス トークンを生成するには、次に何をすればよいですか?
Force.com で作業しているため、sdk を使用することはできません。API を介して直接実装する方法を提案してください。
認証の手順を完了し、アクセス トークンとリフレッシュ トークンを取得しました。
Google ドライブ API 経由で保存した更新トークンを使用してアクセス トークンを生成するには、次に何をすればよいですか?
Force.com で作業しているため、sdk を使用することはできません。API を介して直接実装する方法を提案してください。
Web API を使用している場合は、POST
URL への http 呼び出しを行う必要があります。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": "your refreshed access token",
"expires_in": 3599,
"scope": "Set of scope which you have given",
"token_type": "Bearer"
}
これを自分で実装する場合は、WebサーバーアプリケーションのOAuth 2.0フローがhttps://developers.google.com/accounts/docs/OAuth2WebServerに記載されています。特に、更新トークンの使用に関するセクションを確認する必要があります。
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
私はそれを理解するのに1時間費やしたので、誰かに役立つ場合に備えて私の答えを投稿するだけです:)
まず、Google API と Google サービスからのデータのフェッチに関連する 2 つの非常に役立つリンク:
https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/web-php
https://developers.google.com/identity/protocols/OAuth2WebServer
さらに、次の方法を使用する場合:
$client->setAccessToken($token)
は、オブジェクト内で取得し$token
たものだけでなく、承認リクエストを行うときに Google から返された完全なオブジェクトである必要があるaccess_token
ため、オブジェクトを取得した場合は次のように言います。
{"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
ます。