OpenID Connect Back-Channel Logout 1.0

はじめに

本記事では Authlete の OpenID Connect Back-Channel Logout 1.0 仕様サポートについて説明します。


仕様の概要

サーバーはログアウトトークンを生成し、それを含む HTTP POST リクエストをクライアントのバックチャネルログアウト URI に送信します。 ログアウトトークンを受け取ったクライアントはログアウト処理を実行します。

ログアウトトークンは JWT です。 typ ヘッダーパラメーターの値は logout+jwt と定められています。 ペイロード部には sub クレームまたは sid クレームのどちらか、もしくは両方が含まれており、これらのクレームがログアウト対象を表します。


ログアウトトークン API

Authlete はログアウトトークンを生成するための API を提供します。

API のパスは /api/{service-id}/backchannel/logout/token です。 リクエストボディのフォーマットは application/json または application/x-www-form-urlencoded です。

リクエストパラメーターは次の通りです。

リクエストパラメーター 要否 説明
clientIdentifier 必須 クライアント識別子
subject 任意 エンドユーザーのサブジェクト (識別子)。指定された値はログアウトトークンの sub クレームの値として用いられます。この subject パラメーターと sessionId パラメーターのどちらかは必ず指定する必要があります。
sessionId 任意 セッション ID。指定された値はログアウトトークンの sid クレームの値として用いられます。この sessionId パラメーターと subject パラメーターのどちらかは必ず指定する必要があります。

レスポンスパラメーターは次の通りです。

レスポンスパラメーター 説明
logoutToken 生成されたログアウトトークン
backchannelLogoutUri クライアントの backchannel_logout_uri メタデータパラメーターの値。
action サーバーが次にとるべきアクションを示します。とりうる値は OKSERVER_ERRORCALLER_ERROR です。OK はログアウトトークンの生成に成功したことを示します。
resultCode API コールの結果を表すコード (ほぼ全ての Authlete API レスポンスに共通で含まれるパラメーター)
resultMessage API コールの結果を説明するメッセージ (ほぼ全ての Authlete API レスポンスに共通で含まれるパラメーター)

下記は API コールの例です。

curl --oauth2-bearer ${ACCESS_TOKEN} \
  https://${AUTHLETE_SERVER}/api/${SERVICE_ID}/backchannel/logout/token \
  --json '{
  "clientIdentifier": "client001",
  "subject": "user001",
  "sessionId": "sid001"
}'

下記は API レスポンスの例です。

{
  "action": "OK",
  "logoutToken": "eyJhbGciOiJFUzI1NiIsInR5cCI6ImxvZ291dCtqd3QiLCJraWQiOiIzVFNzM0U4djc3cXhQckhCNUtDendYY3RRajhJY0FBbHRuMThVYWZ1T1RzIn0.eyJpc3MiOiJodHRwczovL3RyaWFsLmF1dGhsZXRlLm5ldCIsInN1YiI6InVzZXIwMDEiLCJhdWQiOiJjbGllbnQwMDEiLCJpYXQiOjE3Nzg0NjE1NjIsImV4cCI6MTc3ODQ2MTY4MiwianRpIjoiMzBhNjljZTctMTQ0YS00MTc5LWIzOGItMTMyNDc1ZDk3Y2E4Iiwic2lkIjoic2lkMDAxIiwiZXZlbnRzIjp7Imh0dHA6Ly9zY2hlbWFzLm9wZW5pZC5uZXQvZXZlbnQvYmFja2NoYW5uZWwtbG9nb3V0Ijp7fX19.rmckdJrYEZg5i085KFMXLpHkPLHe63sjk8Qr9UwRJKBEAIueJomJ0DdzbOybm4475_DtP8wxkhAG0hE_YZgYyQ",
  "backchannelLogoutUri": "https://client.example.com/logout",
  "resultCode": "A518001",
  "resultMessage": "[A518001] A Logout Token for the client 'client001' was issued successfully."
}

この例に含まれるログアウトトークンのヘッダーとペイロードをデコードすると次のようになります。

{
  "alg": "ES256",
  "typ": "logout+jwt",
  "kid": "3TSs3E8v77qxPrHB5KCzwXctQj8IcAAltn18UafuOTs"
}
{
  "iss": "https://trial.authlete.net",
  "sub": "user001",
  "aud": "client001",
  "iat": 1778461562,
  "exp": 1778461682,
  "jti": "30a69ce7-144a-4179-b38b-132475d97ca8",
  "sid": "sid001",
  "events": {
    "http://schemas.openid.net/event/backchannel-logout": {}
  }
}


メタデータ

OpenID Connect Back-Channel Logout 1.0 仕様は、サーバーメタデータパラメーターとクライアントメタデータパラメーターをそれぞれ二つずつ定義しました。 Authlete の Service と Client にも、これらに対応するプロパティー群が追加されました。

Service プロパティー 説明
backchannelLogoutSupported このプロパティは、このサービスが OpenID Connect Back-Channel Logout 1.0 仕様をサポートするかどうかを示します。仕様で定義されている backchannel_logout_supported サーバーメタデータパラメーターに対応します。
backchannelLogoutSessionSupported このプロパティは、このサービスがログアウトトークンsid クレームをサポートするかどうかを示します。OpenID Connect Back-Channel Logout 1.0 仕様で定義されている backchannel_logout_session_supported サーバーメタデータパラメーターに対応します。

このプロパティに true を設定する場合、/api/{service-id}/backchannel/logout/token API への API コールに sessionId リクエストパラメーターを含めるようにしてください。指定した値は sid クレームの値としてログアウトトークンに埋め込まれます。同様に、/api/{service-id}/auth/authorization/issue API への API コールにも sessionId リクエストパラメーターを含めるようにしてください。指定した値は sid クレームの値として ID トークンに埋め込まれます。
Client プロパティー 説明
backchannelLogoutUri OpenID Connect Back-Channel Logout 1.0 仕様で定義されているバックチャネルログアウト URI です。このエンドポイントにログアウトトークンを含む HTTP POST リクエストが送られるので、HTTP でアクセス可能な URL でなければなりません。このプロパティは仕様で定義されている backchannel_logout_uri クライアントメタデータパラメーターに対応します。

URL は ASCII 文字のみで構成され、200 文字を超えてはなりません。スキームは https または http のどちらかで、フラグメントを含んではいけません。

設定された値は、backchannelLogoutUri レスポンスパラメーターの値として /api/{service-id}/backchannel/logout/token API のレスポンスに含まれます。
backchannelLogoutSessionRequired この真偽値プロパティは、ログアントトークンsid クレームを含むことをこのクライアントが要求するかどうかを示します。このプロパティは OpenID Connect Back-Channel Logout 1.0 仕様で定義されている backchannel_logout_session_required クライアントメタデータパラメーターに対応します。

おわりに

OpenID Connect Back-Channel Logout 1.0 仕様は Authlete バージョン 3.0.32 以降でサポートされます。 詳細についてはコンタクトフォームからお問い合わせください。