- OpenID Connect Front-Channel Logout 1.0 のドラフトバージョン4についてメモする。
- RP起点でログアウトリクエストが行われ、OPからログイン中の各RPへログアウトリクエストを行う方法の一つ。
Relying Party Logout Functionality
-
RPはOPへのクライアント登録時にログアウトURIを登録する。
-
ログアウトURI
- ドメイン、ポート、およびスキームは、リダイレクトURIと同じ値
- 絶対URI
- application / x-www-form-urlencoded形式のクエリコンポーネントを含めることが可能
-
流れ
- OPは登録されたログアウトURIをソースとして持つページに
- ログアウトURIをiframeにレンダリングするリクエストを受信した際、RPはCookieやローカルストレージなど、ログインセッションに関連する情報をクリアする。
- ログアウトリクエストを受信したときにエンドユーザーがRP側で既にログアウトしている場合、ログアウト成功と見なされる。
-
OPは、ログアウトURIをレンダリングするときに次のクエリパラメータを追加できる。
パラメータ 説明 iss フロントチャネルログアウトリクエストを発行するOPの発行者識別子 sid セッションの識別子 - RPは
iss
およびsid
パラメータがOPとRPの現在のセッションに対して発行されたIDトークンのiss
およびsid
クレームと一致することを確認し、一致しない場合はログアウトリクエストを無視してもよい。
- RPは
-
RP側のレスポンスには
Cache-Control
ディレクティブを含める必要がある。- キャッシュされたレスポンスがその後のログアウトリクエストに干渉するのを防ぐため。
OpenID Provider Logout Functionality
-
HTTPベースのログアウトをサポートするOPは、ログインしたRP群を追跡しログアウトURIでどのRPに接続してログアウトさせるかを把握しておく必要がある。
-
一部OPでは、ログインした各RPのログアウトURIを動的に
-
OPがOpenIDConnect Discovery 1.0をサポートしている場合は以下のメタデータ値を使用してHTTPベースのログアウトをサポートすることが推奨される。
パラメータ 説明 frontchannel_logout_supported
OPがHTTPベースのログアウトをサポートするかどうかを指定するブール値。true=サポート。省略した場合はfalse扱いとなる。 frontchannel_logout_session_supported
frontchannel_logout_uri
が使用される場合に、OPがiss
およびsid
クエリを渡して、OPとのRPセッションを識別できるかどうかを示すブール値。サポートされている場合、sid
クレームはOPが発行したIDトークンにも含まれる。省略した場合、false
扱いとなる。sid
セッション識別子。RPにログインしているエンドユーザーのユーザーエージェントまたはデバイスのセッションを表す。
User Agents Blocking Access to Third-Party Content
- 一部のブラウザでは、(サイト間でユーザーのアクティビティを追跡するための)3rd パーティコンテンツ(Cookieなど)へのアクセスをブロックし始めている。
- OPからの通知により、RPのユーザーエージェント状態にアクセスしてローカルログアウトを実装できなくなる可能性がある。
- iframeはOPのページとは異なるオリジンにある。
-
frontchannel_logout_uri
は、iframe内のOPによってレンダリングされたときにRPのログイン状態にアクセスできない場合がある。