Table of Contents
本記事では Authlete の OpenID Connect Back-Channel Logout 1.0 仕様サポートについて説明します。
サーバーはログアウトトークンを生成し、それを含む HTTP POST リクエストをクライアントのバックチャネルログアウト URI に送信します。 ログアウトトークンを受け取ったクライアントはログアウト処理を実行します。
ログアウトトークンは JWT です。
typ ヘッダーパラメーターの値は logout+jwt と定められています。
ペイロード部には sub クレームまたは sid クレームのどちらか、もしくは両方が含まれており、これらのクレームがログアウト対象を表します。
Authlete はログアウトトークンを生成するための API を提供します。
API のパスは /api です。
リクエストボディのフォーマットは application または
application です。
リクエストパラメーターは次の通りです。
| 要否 | 説明 | |
|---|---|---|
client |
必須 | クライアント識別子 |
subject |
任意 | エンドユーザーのサブジェクト (識別子)。指定された値はログアウトトークンの sub クレームの値として用いられます。この subject パラメーターと sessionId パラメーターのどちらかは必ず指定する必要があります。 |
sessionId |
任意 | セッション ID。指定された値はログアウトトークンの sid クレームの値として用いられます。この sessionId パラメーターと subject パラメーターのどちらかは必ず指定する必要があります。 |
レスポンスパラメーターは次の通りです。
| 説明 | |
|---|---|
logout |
生成されたログアウトトークン |
backchannel |
クライアントの backchannel_ メタデータパラメーターの値。 |
action |
サーバーが次にとるべきアクションを示します。とりうる値は OK、SERVER_ERROR、CALLER_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 |
説明 |
|---|---|
backchannel |
このプロパティは、このサービスが OpenID Connect Back-Channel Logout 1.0 仕様をサポートするかどうかを示します。仕様で定義されている backchannel_ サーバーメタデータパラメーターに対応します。 |
backchannel |
このプロパティは、このサービスがログアウトトークンの sid クレームをサポートするかどうかを示します。OpenID Connect Back-Channel Logout 1.0 仕様で定義されている backchannel_ サーバーメタデータパラメーターに対応します。このプロパティに true を設定する場合、/api API への API コールに sessionId リクエストパラメーターを含めるようにしてください。指定した値は sid クレームの値としてログアウトトークンに埋め込まれます。同様に、/api API への API コールにも sessionId リクエストパラメーターを含めるようにしてください。指定した値は sid クレームの値として ID トークンに埋め込まれます。 |
| Client |
説明 |
|---|---|
backchannel |
OpenID Connect Back-Channel Logout 1.0 仕様で定義されているバックチャネルログアウト URI です。このエンドポイントにログアウトトークンを含む HTTP POST リクエストが送られるので、HTTP でアクセス可能な URL でなければなりません。このプロパティは仕様で定義されている backchannel_ クライアントメタデータパラメーターに対応します。URL は ASCII 文字のみで構成され、200 文字を超えてはなりません。スキームは https または http のどちらかで、フラグメントを含んではいけません。設定された値は、 backchannel レスポンスパラメーターの値として /api API のレスポンスに含まれます。 |
backchannel |
この真偽値プロパティは、ログアントトークンが sid クレームを含むことをこのクライアントが要求するかどうかを示します。このプロパティは OpenID Connect Back-Channel Logout 1.0 仕様で定義されている backchannel_ クライアントメタデータパラメーターに対応します。 |
OpenID Connect Back-Channel Logout 1.0 仕様は Authlete バージョン 3.0.32 以降でサポートされます。 詳細についてはコンタクトフォームからお問い合わせください。