Help us understand the problem. What is going on with this article?

OpenID Connect RP-Initiated Logoutベストプラクティス

OpenID Connectでは、RPでログアウトを実行したときにOPからもログアウトする方法(RP-Initiated Logout)が OpenID Connect Session Management 1.0 (draft 28) という仕様で定義されている。

この仕様を実装する際のベストプラクティスについて、RFCや各社の実装をもとに検討した。

ベストプラクティス

  • DOS攻撃(CSRF等でのend_session_endpointへのリクエスト送信)対策

    • First PatryのSSO連携で利用する場合はid_token_hintの指定を必須とする。
    • id_token_hint指定を強制できない場合は、ログアウト確認ダイアログを挟む。
  • post_logout_urlの検証

    • id_token_hintの指定を必須とできる場合は、IDトークンのaudに指定されるクライアントに登録された値と検証するのが手軽。
    • そうでない場合は、登録された全てのクライアントの登録値と検証するか、SSOでログイン中のクライアントに絞って検証することもできる。

RFCから読み取れること

  • id_token_hintの指定はRECOMMENDED、post_logout_uriとstateの指定はOPTIONALとなっている。
  • post_logout_uriは事前の登録が必要となっているが、検証ロジックの詳細は記載されていない。
  • OPはユーザーにOPからもログアウトを希望するかを確認すべき(SHOULD)となっている。
  • id_token_hintが指定されない場合は、DOS攻撃を防ぐためにユーザーにログアウトをするか確認するという方法が、Security Considerationで言及されている。

各社の実装仕様

IdentityServer4参考

  • id_token_hintを指定すると、ログアウトを実行するか確認するダイアログ表示をスキップできる。
  • post_logout_redirect_uri、stateはid_token_hintを指定した場合のみ利用可能となる。

gluu参考1参考2

  • ガイドライン上はid_token_hint、session_idを指定しない場合もOPでのログアウトが実行されるとあるが、APIリファレンスではid_token_hintが必須となっている。(APIリファレンスの方が誤植?)
  • post_logout_redirect_uriの検証は、SSOに参加しているクライアントのいずれかに登録された値である場合に正当となる。
  • post_logout_redirect_uriを指定しない場合もOPでのログアウトは実行されるが、HTTP 400ステータスコードが返却される。

Conect2id参考

  • id_token_hintは指定を推奨とされている。
  • post_logout_redirect_uriはid_token_hintを指定した場合のみ利用可能となる。

Hydra参考1参考2

  • id_token_hintが必須指定となっている。
  • GitHub Issueのコメントからは、id_token_hintからclient_id(aud)を取得してpost_logout_redirect_uriの検証を行っているようである。

okta参考

  • id_token_hintが必須指定となっている。
  • post_logout_redirect_uriは任意指定であり、指定しない場合はOPのログイン画面にリダイレクトされる。

Azure Active Directory B2C参考

  • id_token_hintは任意指定であるが、post_logout_redirect_uriを利用するためには指定が必要となる。(id_token_hintに紐づくクライアント設定からpost_redirect_uriの検証をしているようである。)
  • 「ログアウト要求にIDトークンを必要としない」という設定をした場合には、id_token_hintの代わりにclient_idを指定できるようになる。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした