メインコンテンツまでスキップ
プレビュー版
PocketSign Link v2 は現在プレビュー版です。正式提供までに仕様が変更される可能性があります。

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>

主なクレーム

クレーム説明
issIssuer。ID トークンの iss と同じ
subサービスごとのサブスクリプション ID。ID トークンの sub と同じ
audクライアント ID
iat発行時刻
jtiLogout Token の一意識別子
events{"http://schemas.openid.net/event/backchannel-logout": {}} を含む
sidRP ごとのクライアントセッション ID。ID トークンの sid と対応する

PocketSign Link v2 では subsid の両方が常に含まれます。

Logout Token に含まれないもの

  • nonce は含まれません。Logout Token に nonce が含まれていた場合は、不正なトークンとして拒否してください。

RP 側の実装

sid の保持

サービスは、ログイン時に受け取った ID トークンの sid を自身のセッションと紐づけて保持してください。 Back-Channel Logout 通知を受けたとき、Logout Token の sid と一致するセッションを特定して無効化するために必要です。

Logout Token の検証

Logout Token を受け取ったら、以下を検証してください。

  1. 署名が jwks_uri の鍵で検証できること
  2. iss が想定した PocketSign Link v2 の Issuer であること
  3. aud に自分の client_id が含まれること
  4. iat が許容可能な時間範囲内であること
  5. eventshttp://schemas.openid.net/event/backchannel-logout が含まれること
  6. nonce が含まれていないこと
  7. 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_uriPocketSign 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_supportedtrue
backchannel_logout_session_supportedtrue

backchannel_logout_session_supportedtrue であるため、Logout Token には常に sid が含まれます。

実装チェックリスト

  • ログイン時に ID トークンの sid を自分のセッションに保存する
  • backchannel_logout_uri に POST を受け付けるエンドポイントを用意する
  • Logout Token の署名、issaudiateventsjti を検証する
  • nonce が含まれていたら拒否する
  • jti を一定時間記録してリプレイを防止する
  • sid に対応するセッションを無効化する
  • レスポンスに Cache-Control: no-store を付ける
  • 必要に応じて revoke でトークンを失効する

関連ページ