> ## Documentation Index
> Fetch the complete documentation index at: https://developers.authlete.com/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenID Connect Back-Channel Logout 1.0

> Authlete の OpenID Connect Back-Channel Logout 1.0 仕様サポートに関する説明です。

## はじめに

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

<br />

## 仕様の概要

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

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

<img alt="" class="mx-auto d-block" src="https://mintcdn.com/authlete/WGQFc11Y4wUplGrc/ja/configuration-reference/endpoints/bclogout.png?fit=max&auto=format&n=WGQFc11Y4wUplGrc&q=85&s=3b6bc5ba3cd0b4527fb5f7b15791ef8d" width="1920" height="1080" data-path="ja/configuration-reference/endpoints/bclogout.png" />

<br />

## ログアウトトークン 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`               | サーバーが次にとるべきアクションを示します。とりうる値は `OK`、`SERVER_ERROR`、`CALLER_ERROR` です。`OK` はログアウトトークンの生成に成功したことを示します。 |
| `resultCode`           | API コールの結果を表すコード (ほぼ全ての Authlete API レスポンスに共通で含まれるパラメーター)                                          |
| `resultMessage`        | API コールの結果を説明するメッセージ (ほぼ全ての Authlete API レスポンスに共通で含まれるパラメーター)                                      |

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

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

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

```json theme={null}
{
  "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."
}
```

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

```json theme={null}
{
  "alg": "ES256",
  "typ": "logout+jwt",
  "kid": "3TSs3E8v77qxPrHB5KCzwXctQj8IcAAltn18UafuOTs"
}
```

```json theme={null}
{
  "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": {}
  }
}
```

<br />

<Note>
  `/api/{service-id}/backchannel/logout/token`
  API の現在の実装はトークンを自動的に削除しないので注意してください。
  削除する必要があれば、revocation endpoint を呼ぶなどして削除をトリガーしてください。
</Note>

<br />

## メタデータ

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

| Service プロパティー                      | 説明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| :---------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `backchannelLogoutSupported`        | このプロパティは、このサービスが [OpenID Connect Back-Channel Logout 1.0][BC_LOGOUT] 仕様をサポートするかどうかを示します。仕様で定義されている `backchannel_logout_supported` サーバーメタデータパラメーターに対応します。                                                                                                                                                                                                                                                                                                                                                                       |
| `backchannelLogoutSessionSupported` | このプロパティは、このサービスが[ログアウトトークン][LOGOUT_TOKEN]の `sid` クレームをサポートするかどうかを示します。[OpenID Connect Back-Channel Logout 1.0][BC_LOGOUT] 仕様で定義されている `backchannel_logout_session_supported` サーバーメタデータパラメーターに対応します。<br /><br />このプロパティに `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][BC_LOGOUT] 仕様で定義されているバックチャネルログアウト URI です。このエンドポイントに[ログアウトトークン][LOGOUT_TOKEN]を含む HTTP POST リクエストが送られるので、HTTP でアクセス可能な URL でなければなりません。このプロパティは仕様で定義されている `backchannel_logout_uri` クライアントメタデータパラメーターに対応します。<br /><br />URL は ASCII 文字のみで構成され、200 文字を超えてはなりません。スキームは `https` または `http` のどちらかで、フラグメントを含んではいけません。<br /><br />設定された値は、`backchannelLogoutUri` レスポンスパラメーターの値として `/api/{service-id}/backchannel/logout/token` API のレスポンスに含まれます。 |
| `backchannelLogoutSessionRequired` | この真偽値プロパティは、[ログアントトークン][LOGOUT_TOKEN]が `sid` クレームを含むことをこのクライアントが要求するかどうかを示します。このプロパティは [OpenID Connect Back-Channel Logout 1.0][BC_LOGOUT] 仕様で定義されている `backchannel_logout_session_required` クライアントメタデータパラメーターに対応します。                                                                                                                                                                                                                                                            |

<br />

## おわりに

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

[BC_LOGOUT]: https://openid.net/specs/openid-connect-backchannel-1_0.html

[CONTACT]: https://www.authlete.com/ja/contact

[LOGOUT_TOKEN]: https://openid.net/specs/openid-connect-backchannel-1_0.html#LogoutToken
