メインコンテンツまでスキップ

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 では sub と sid の両方が常に含まれます。

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. events に http://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_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 でトークンを失効する

関連ページ​