OAuthのoffline_accessについて

少し前ですが、OpenID Connectのbitbuckeetでoffline_accessについての議論がされていたので、まとめておきます。

Googleの場合

offline access の定義

  • refresh tokenが発行されるのがoffline。
  • 特にoffline accessを要求しない限り、デフォルトではonline accessを要求したものと見なされる。
  • online accessの場合はrefresh tokenは発行されない。
  • refresh tokenはユーザーがrevokeするまで有効。

auto approval

  • 一度ApproveされたClientに対しては、accessがrevokeされるまでは次回以降のAuthorization Request時の同意画面はスキップされる。
  • 同意画面がスキップされる場合、refresh tokenは発行されない。

promptとaccess_type

  • Authorization Request時にprompt=trueというパラメーターを指定すると、auto approvalを無効化し、ユーザーに同意画面を見せることができる。
  • 同様にaccess_type=offlineを指定すると、offline accessを要求できる。
  • access_type=offlineを指定した場合、初回同意時にのみrefresh tokenが発行される。
  • それ以降もrefresh tokenが必要な場合は、prompt=trueとaccess_type=offlineを同時に指定すること。

AOLの場合

offline accessの定義

  • デフォルトではcode flowでは常にrefresh tokenが返される。
  • refresh tokenはユーザーがログアウトするまで有効。
  • ユーザーがログアウトしても有効なrefresh tokenが欲しい場合は、scopeにoffline_accessを指定する。

auto approval

  • ユーザーが明示的にチェックボックスにチェックを入れた場合のみ、次回以降の同意画面がスキップされる。
  • 同意画面がスキップされるケースでも、offline_accessを要求することができる。

ところでこのIssue、まだopenですね。