GoogleアカウントでOAuth2.0/OpenID Connectの実験をした際ののメモです。
GoogleのOAuth2.0認可エンドポイントにアクセスするとアクセストークンが払い出されます。アクセストークンの有効期限は1時間です。
アクセストークンが期限切れになった場合に再度認可エンドポイントにアクセスしても問題ありませんが、リフレッシュトークンを利用して暗黙にアクセストークンを再発行することもできます。
一度発行されたリフレッシュトークンは無期限で使えます。6ヶ月使われていなければ無効化されますが、利用されている限り有効となります。
リフレッシュトークンを発行するためのパラメータ指定がある
Googleでリフレッシュトークンを取得する場合、認可エンドポイントへのアクセスの仕方が少し変わります。
下記URLによれば、access_type=offline
を付けないとリフレッシュトークンが発行されないようです。また、理屈はわかっていないんですがprompt=consent
も付ける必要があるようです1。
prompt=consent
の代わりにapproval_prompt=force
というパラメータをつけろという話もググると見つかるんですが、多分これは昔の仕様で廃止予定なんじゃないでしょうか(今も使えるようですが)。
リフレッシュトークン無効化はすぐ反映される
下記URLによれば、ユーザーがアプリのアクセス権を取り消すことでリフレッシュトークンを無効化できると書いてあります。
実際、アクセス権を取り消すとすぐリフレッシュトークンが無効化されて、下記のようなレスポンスが帰ってきました。
{ error: 'invalid_grant', error_description: 'Token has been expired or revoked.' }
-
https://github.com/pomerium/pomerium/pull/81 を読むとワークアラウンドとか書いてありますね… ↩