Table of Contents
本記事では、ID トークンの JWS ヘッダーに独自のクレームを追加する方法を説明します。
本機能は Authlete 2.2 以降でのみ利用可能になります。
認可サーバーは以下の Authlete API に対するリクエストにおいて、idtHeaderParams パラメーターを用いて、ID トークンのヘッダーに追加したい独自のクレーム群を JSON 形式にて指定します。
Authlete は受け取った独自クレームを ID トークンのヘッダーに追加し、認可サーバーに返却します。
本セクションでは、認可コードフローにおける、独自クレームを含む ID トークンの生成手順を例示します。
ここでは、以下の独自クレームを ID トークンのヘッダーに含めるものとします。
| Key | Value | 
|---|---|
| typ | JWT | 
| extra_key | extra_value | 
idtHeaderParams パラメーターに指定する JSON 形式の値は以下のようになります。
{
    "typ": "JWT",
    "extra_key": "extra_value"
}
クライアント(OIDC リライングパーティ)は認可サーバー(OIDC アイデンティティプロバイダー)に対し、scope=openid / response_type=code を含む認証リクエストをユーザーエージェント経由で送信します。
認可サーバーはその認証リクエストを Authlete の /auth/authorization API に転送し、次に Authlete API へリクエストを行う際に必要な値 (ticket) を取得します。(詳細は割愛します)
認可サーバーは、必要に応じてユーザー認証と同意確認を行い、Authlete の /auth/authorization/issue API を呼び出します。このときに、さきほど用意した独自クレームを idtHeaderParams パラメーターとして指定します。
以下は curl による実行例です。(読みやすさのために折り返しています)
curl -s -X POST .../auth/authorization/issue
 -u $apiKey:$apiSecret
 -H 'Content-type: application/json'
 -d '{"subject":"...",
      "ticket": "...",
      "idtHeaderParams":
        "{\"typ\":\"JWT\",
          \"extra_key\":\"extra_value\"}"
     }'
{
    "type": "authorizationIssueResponse",
    "resultCode": "A040001",
    "resultMessage": "[A040001] The authorization request was processed successfully.",
    "accessTokenDuration": 0,
    "accessTokenExpiresAt": 0,
    "action": "LOCATION",
    "authorizationCode": "eOEh...3eSc",
    "responseContent": "https://...?code=eOEh...3eSc"
}
このレスポンスを受け取った認可サーバーは、クライアントに対してユーザーエージェント(Web ブラウザ)経由で認可コード (eOEh…3eSc) を返却することになります。
認可コードを受け取ったクライアントは、認可サーバーに対して、認可コードを含むトークンリクエストを送信します。そして認可サーバーはそのトークンリクエストを Authlete の /auth/token API に転送し、トークンレスポンスを取得します。
以下は curl による実行例です。(読みやすさのために折り返しています)
curl -s -X POST .../auth/token \
     -u $apiKey:$apiSecret \
     -H 'Content-type: application/json' \
     -d '{"clientId":"...",
          "clientSecret":"...",
          "parameters":
            "redirect_uri=https://...
            &grant_type=authorization_code
            &code=eOEh...3eSc"}'
{
  "type": "tokenResponse",
  "resultCode": "A050001",
  "resultMessage":
    "[A050001] The token request (grant_type=authorization_code) was
     processed successfully.",
  "accessToken": "9Myh...sYMs",
  "action": "OK",
  "grantType": "AUTHORIZATION_CODE",
  "idToken":
    "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImV4dHJ
     hX2tleSI6ImV4dHJhX3ZhbHVlIn0.
     eyJzdWIiOiJ0ZXN0dXNlcjAxIiwiYXVkIjpbIjI4MzA
     0NTE3OTYwODU5NDAiXSwiaXNzIjoiaHR0cHM6Ly9hcy
     5leGFtcGxlLmNvbSIsImV4cCI6MTU5OTcyNjA0MCwia WF0IjoxNTk5NjM5NjQwfQ.
     -jo-A-SXjP4JlBSc24vKkO6FVf3MQJ6eN-XzPAraiZ4",
  "refreshToken": "SlEl...cWoY",
  "responseContent":
    "{\"access_token\":\"9Myh...sYMs\",
      \"refresh_token\":\"lEl...cWoY\",
      \"scope\":\"openid\",
      \"id_token\":
        \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImV4dHJ
          hX2tleSI6ImV4dHJhX3ZhbHVlIn0.
          eyJzdWIiOiJ0ZXN0dXNlcjAxIiwiYXVkIjpbIjI4MzA
          0NTE3OTYwODU5NDAiXSwiaXNzIjoiaHR0cHM6Ly9hcy
          5leGFtcGxlLmNvbSIsImV4cCI6MTU5OTcyNjA0MCwia
          WF0IjoxNTk5NjM5NjQwfQ.
          -jo-A-SXjP4JlBSc24vKkO6FVf3MQJ6eN-XzPAraiZ4\",
      \"token_type\":\"Bearer\",
      \"expires_in\":86400}",
  "scopes": [
    "openid"
  ],
  ...
このレスポンスに含まれる ID トークン (eyJh…aiZ4) の JWS ヘッダーには独自クレームが追加されています。以下はヘッダー部をデコードした結果です。
{
    "alg": "HS256",
    "typ": "JWT",
    "extra_key": "extra_value"
}
以上のように、独自定義したクレームを ID トークンのヘッダーに追加できました。