通常、Google OAuth2.0 メカニズムはうまく機能しています。
- ユーザーは、選択したスコープで Google アカウントにアクセスする権限を確認します。
- リフレッシュ トークンが取得され、長期ストレージに保存されます。
- 必要なたびに (アクセス トークンの有効期限が切れた場合)、アクセス トークンが取得され、API へのアクセスに使用されます。
しかし、ときどき (これまでのところ、6 か月以上にわたって 2 回だけ) 奇妙な動作を経験しました。
Google API へのリクエストで、無効な資格情報 (401) エラーが返されます。(保存されている更新トークンを使用して) アクセス トークンを更新しても役に立ちません。
この問題をテストしたときに得た構造化された出力を次に示します。
+ -------------------------------------------------- ------------------------ + | | 1.トークンを更新しようとしています。| | | | 2.トークンの更新が完了しました。| | + -------------------------------------------------- ------------------------ + | | アクセス: ************************************************ **** | | | 更新: ******************************************** | | | 有効期限: 3600 | | | 作成: 2013-07-23 13:12:36 | + -------------------------------------------------- ------------------------ +
また、リクエストをhttps://www.googleapis.com/oauth2/v1/tokeninfoに送信して、「新しい」アクセス トークンを検証しようとしました 。
+ -------------------------------------------------- ------------------------ + | | 1.トークンを確認しようとしています。| | | | 2. トークンのチェックを完了します。| | + -------------------------------------------------- ------------------------ + | | 発行先: ************.apps.googleusercontent.com | | | オーディエンス: ************.apps.googleusercontent.com | | | ユーザー ID: ************ | | | 有効期限: 3600 | | | 電子メール: **********@gmail.com | | | 検証済み_電子メール: 1 | | | access_type: オフライン | | | スコープ:: | + -------------------------------------------------- ------------------------ + | | https://www.googleapis.com/auth/userinfo.email | | | https://www.googleapis.com/auth/userinfo.profile | | | https://www.googleapis.com/auth/plus.me | | | https://www.googleapis.com/auth/drive | + -------------------------------------------------- ------------------------ +
しかし、ドライブ フィードにアクセスしようとすると、次のような応答が返されます。
GET の呼び出しエラー https://www.googleapis.com/drive/v2/files (401) 無効な資格情報 ドメイン: グローバル 理由: authError メッセージ: 資格情報が無効です locationType: ヘッダー 場所: 認可
カレンダーでも同じ問題が発生しました。そう:
- トークンは以前は有効でした (すべてが機能していました)。
- トークンの更新は引き続き機能します。
- フィードをリクエストすると、「資格情報が無効です」というエラーが返されます。
- 他のすべてのトークンは引き続き正常に機能しており、コードが有効であることを意味します。
通常、トークンが取り消されると、トークンを更新しようとすると「invalid_grant」エラーが返されます。
質問
- この動作の理由は何ですか? リフレッシュ トークンが取り消された、または他の方法で無効になった場合、新しいアクセス トークンの要求でエラーが発生する必要がありますか?
- リフレッシュトークンを検証する方法はありますか?