> ## 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.

# 暗号化した ID トークンの生成

> IDトークンを生成するための暗号化設定例を示します。

## はじめに

本記事では、暗号化した ID トークンを生成するための設定例を示します。

***

## JWK セットの準備・登録

ID トークンの暗号化に用いる、クライアントの JWK セットを準備・登録します。手順については以下の記事をご参照ください。

* [OAuth / OIDC クライアントの JWK セット設定](/ja/configuration-reference/key-management/jwk-set-settings-for-an-oauth-oidc-client)

本例では以下の JWK セットを登録します。

```
{
    "keys": [
        {
            "kty": "EC",
            "use": "enc",
            "crv": "P-256",
            "kid": "_agec7UaYVN4c3RZQJQhUuR6nFSnqEXywv3QaIfFRFk",
            "x": "ilLNQ-Lcp_t5DBs9puJVI3JhwqlMndTILjkBrNd3Dsc",
            "y": "3Uy7NIHilkOWviGXMRIl2ZUE4L7Mc8ub4VhosE3l8t8"
        }
    ]
}
```

<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/oauth-and-openid-connect/id-tokens/encrypted-id-token_1.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=24a98927146dce1bd760d8d31b37d134" alt="encrypted-id-token_1" width="944" height="666" data-path="img/kb/ja/oauth-and-openid-connect/id-tokens/encrypted-id-token_1.png" />

***

## ID トークンの暗号化設定

クライアントに対する ID トークンの暗号化アルゴリズムを選択します。詳細については「[クライアントの設定項目 - ID トークン](https://www.authlete.com/ja/kb/operations/client-settings/client-settings)
」をご参照ください。

ここでは、先に登録した公開鍵に従い、以下の通り設定します。

| 項目                  | 値                  |
| ------------------- | ------------------ |
| ID トークンのキー暗号化アルゴリズム | **ECDH\_ES**       |
| ID トークンの本文暗号化アルゴリズム | **A128CBC\_HS256** |

<img src="https://mintcdn.com/authlete/NmFoIJ4VSX_LOgob/img/kb/ja/oauth-and-openid-connect/id-tokens/encrypted-id-token_2.png?fit=max&auto=format&n=NmFoIJ4VSX_LOgob&q=85&s=54c90f3af5d3c734cd9828bd55d98094" alt="encrypted-id-token_2" width="944" height="669" data-path="img/kb/ja/oauth-and-openid-connect/id-tokens/encrypted-id-token_2.png" />

*ID トークンの暗号化設定*

***

以上の設定により Authlete は、このクライアントに提供する ID トークンについて、暗号化を行うようになります。以下は暗号化された値の例です。

```
eyJlcGsiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJDeVU3XzdMNlRaeHdmZzhBNkRUNUxMSz
1ZWlBSE1yTzJyYWt5WEY0TUFZIiwieSI6InZ6MkJZd1k1WmJFUkV2OGxTcWNuREpQVkdQMExyWXpUS2NiZUR2aTVKQlUifSw
ia2lkIjoiX2FnZWM3VWFZVk40YzNSWlFKUWhVdVI2bkZTbnFFWHl3djNRYUlmRlJGayIsImVuYyI6IkExMjhDQkMtSFMyNTY
iLCJhbGciOiJFQ0RILUVTIn0..e9rmLbmTkuaUL7AdUB9umw.-o4aia0O6FUarqN3Owssu6ko4v9YqjMJXm00Sj-w7oH7YjmgZDR
j7omoXSnmU19wYFhC70yzv8U2B0pXNxLqVZOv4vQchwslP6Ms55cmgvenCHcIbsXFirb8we-6Z0EfKiKmLCy0NU8kFE0fQ-6y9
n91WI9hGPVbw968FtA2y7x2JXGv93nPryshCp4HJz2HXQeb5F18RSsCAkY5nE7-GqD81DnmG6-rdVoOBAGM7LK_lc8gIhSozmNn7
8cFtfQrNn6S0VFWM2e8SyukQtdGk3um3mZAjRdDNtsACkztQJo.5S7YimrpLKuWnRM0hwdJzweyJlcGsiOnsia3R5IjoiRUMiLCJj
cnYiOiJQLTI1NiIsIngiOiIzUHNVT0lj
```

***

## ID トークンの復号

上記の ID トークンを取得したクライアントは、自身の秘密鍵を用いて復号を行います。以下は復号に用いる JWK セットの例です。

```
{
    "Keys": [
        {
            "kty": "EC",
            "d": "4AEnTq3H8gcIutIoJCCZuv9GgWdKRaoJIXQkdM8r0UA",
            "use": "enc",
            "crv": "P-256",
            "kid": "_agec7UaYVN4c3RZQJQhUuR6nFSnqEXywv3QaIfFRFk",
            "x": "ilLNQ-Lcp_t5DBs9puJVI3JhwqlMndTILjkBrNd3Dsc",
            "y": "3Uy7NIHilkOWviGXMRIl2ZUE4L7Mc8ub4VhosE3l8t8",
            "typ": "ECDH_ES"
        }
    ]
}
```

以下は [José](https://github.com/latchset/jose) を用いて復号し、ペイロードを抽出する例です。

```
jose jwe dec -i <ID token> -k <JWK set> \
| cut -d"." -f2 \
| base64 --decode \
| jq

{
  "sub": "testuser01",
  "aud": [
      "17201083166161"
  ],
  "iss": "https://authlete.com",
  "exp": 1595921860,
  "iat": 1595835460
}
```
