Back-Channel Logout
PocketSign Link v2 は OpenID Connect Back-Channel Logout 1.0 に対応しています。
v2 側でセッションが終了したとき、登録済みの backchannel_logout_uri に対して Logout Token を POST することで、サービスにログアウトを通知します。
いつ通知されるか
次のいずれかが発生したとき、PocketSign Link v2 は対象クライアントの backchannel_logout_uri に Logout Token を POST します。
- ユーザーが PocketSign Link v2 からログアウトした
- セッションタイムアウトによりセッションが失効した
- ユーザーがマイページの端末管理画面からログイン中端末の削除・ログアウト操作を行った
全体の流れ
Logout Token
PocketSign Link v2 が RP に送る Logout Token は、署名付き JWT です。
署名検証に使う公開鍵は、ID トークンと同じく jwks_uri から取得できます。
リクエスト形式
PocketSign Link v2 は backchannel_logout_uri に対して、次の形式で POST します。
POST /backchannel-logout HTTP/1.1
Host: rp.example.com
Content-Type: application/x-www-form-urlencoded
logout_token=<signed_jwt>
主なクレーム
| クレーム | 説明 |
|---|---|
iss | Issuer。ID トークンの iss と同じ |
sub | サービスごとのサブスクリプション ID。ID トークンの sub と同じ |
aud | クライアント ID |
iat | 発行時刻 |
jti | Logout Token の一意識別子 |
events | {"http://schemas.openid.net/event/backchannel-logout": {}} を含む |
sid | RP ごとのクライアントセッション ID。ID トークンの sid と対応する |
PocketSign Link v2 では sub と sid の両方が常に含まれます。
Logout Token に含まれないもの
nonceは含まれません。Logout Token にnonceが含まれていた場合は、不正なトークンとして拒否してください。
RP 側の実装
sid の保持
サービスは、ログイン時に受け取った ID トークンの sid を自身のセッションと紐づけて保持してください。
Back-Channel Logout 通知を受けたとき、Logout Token の sid と一致するセッションを特定して無効化するために必要です。
Logout Token の検証
Logout Token を受け取ったら、以下を検証してください。
- 署名が
jwks_uriの鍵で検証できること issが想定した PocketSign Link v2 の Issuer であることaudに自分のclient_idが含まれることiatが許容可能な時間範囲内であることeventsにhttp://schemas.openid.net/event/backchannel-logoutが含まれることnonceが含まれていないことjtiが未処理であること(リプレイ防止)
セッション無効化
検証に成功したら、Logout Token の sid に対応するサービス側のセッションを無効化してください。
sub も含まれるため、sid だけでなく sub も照合に使うとより安全です。
レスポンス
| 状況 | HTTP ステータス |
|---|---|
| ログアウト処理成功 | 200 OK |
| Logout Token の検証失敗 | 400 Bad Request |
レスポンスには Cache-Control: no-store ヘッダーを付けてください。
レスポンスボディは空で構いません。
トークンへの影響
Back-Channel Logout は セッション終了の通知 であり、PocketSign Link v2 側でトークンを失効する操作ではありません。
サービスは、Logout Token を受けて自身のセッションを無効化した後、必要に応じて POST /api/oidc/v1/revoke で手動でトークンを失効してください。
クライアント設定
Back-Channel Logout を使うには、クライアント設定で backchannel_logout_uri を登録する必要があります。
| 設定項目 | 説明 |
|---|---|
backchannel_logout_uri | PocketSign Link v2 が Logout Token を POST する先の URI |
要件
- HTTPS であること
- PocketSign Link v2 からネットワーク到達可能であること
backchannel_logout_uriが未設定のクライアントには通知されません
Discovery
PocketSign Link v2 の Discovery Document (/.well-known/openid-configuration) には、以下が含まれます。
| フィールド | 値 |
|---|---|
backchannel_logout_supported | true |
backchannel_logout_session_supported | true |
backchannel_logout_session_supported が true であるため、Logout Token には常に sid が含まれます。
実装チェックリスト
- ログイン時に ID トークンの
sidを自分のセッションに保存する backchannel_logout_uriに POST を受け付けるエンドポイントを用意する- Logout Token の署名、
iss、aud、iat、events、jtiを検証する nonceが含まれていたら拒否するjtiを一定時間記録してリプレイを防止するsidに対応するセッションを無効化する- レスポンスに
Cache-Control: no-storeを付ける - 必要に応じて
revokeでトークンを失効する
関連ページ
- クライアント設定は クライアント設定
- ID トークンのクレームは トークン
- トークン失効は UserInfo とトークン照会
- セキュリティ全般は OIDC / OAuth2 セキュリティ