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 トークンのヘッダーに追加できました。