「JWT ベースのアクセストークン」の有効化
概要
Authlete には JWT 形式のアクセストークンを発行する機能があります。機能を有効化するには、署名鍵の登録と署名アルゴリズムの指定が必要となります。本記事ではその手順について説明します。
サービス設定の変更
登録後、「トークン」タブに移動し、適切な「アクセストークン署名アルゴリズム」を選択します。たとえば ES256 の署名鍵を登録した場合(上記の記事の例)には、「ES256」を選択します。
設定後、Authlete の発行するアクセストークンは JWT 形式となります。
追加のプロパティをアクセストークンに埋め込む
任意の Key/Value の組をアクセストークンに埋め込むには Authlete の Extra Properties 機能を用います。クライアントに開示されるよう指定した("hidden":false の)プロパティが、カスタムクレームとして、JWT 形式のアクセストークンに含まれます。リソースサーバーはこれらのクレームを抽出して利用できるようになります。
動作例
以下は、JWT 形式のアクセストークンを発行するよう Authlete サービスを設定した場合の /auth/token API の動作例です。またこの例では Extra Properties を用いた場合の出力を示しています(一部折り返しています)。
"jwtAccessToken" の値、ならびに "responseContent" (トークンレスポンスの内容)の値に含まれる "access_token" の値が JWS signed JWT になっています。
$ curl -s -X POST https://api.authlete.com/api/auth/token \ -u ...:... \ -H 'Content-Type: application/json' \ -d '{"clientId":"...","clientSecret":"...", "parameters":"grant_type=authorization_code& redirect_uri=https://client.example.org/cb/example.com& code=..."}]}'|jq { "type": "tokenResponse", "resultCode": "A050001", "resultMessage": "[A050001] The token request (grant_type=authorization_code) was processed successfully.", "accessToken": "xx2...AFQ", "accessTokenDuration": 86400, "accessTokenExpiresAt": 1591690046802, "action": "OK", "clientId": 17201083166161, "clientIdAliasUsed": false, "grantType": "AUTHORIZATION_CODE", "jwtAccessToken": "eyJraWQiOiIxIiwiYWxnIjoiRVMyNTYifQ. eyJleGFtcGxlX3BhcmFtZXRlciI6ImV4YW1wbGVfdmFsdWUiLCJz dWIiOiJ0ZXN0dXNlcjAxIiwic2NvcGUiOm51bGwsImlzcyI6Imh0 dHBzOi8vYXV0aGxldGUuY29tIiwiZXhwIjoxNTkxNjkwMDQ2LCJp YXQiOjE1OTE2MDM2NDYsImNsaWVudF9pZCI6IjE3MjAxMDgzMTY2 MTYxIiwianRpIjoieHgycnNJODBER1Z4bHFLdTFQV2R4eWJSLTdB eTZWamJNcTAxY3dNYkFGUSJ9. -9RsKUSnJHmdqNtNpWbbbTah1YxTkicsabIgxrLWHtGiLsTIaEj_ q39AvKYWrmfnw5y0dfaD3qtTScxI94OSIg", "properties": [ { "hidden": false, "key": "example_parameter", "value": "example_value" } ], "refreshToken": "4rA7H1uRZkCQ7Yd0PN98h7IUqW7zT8p1a_BAg0jEyow", "refreshTokenDuration": 864000, "refreshTokenExpiresAt": 1592467646802, "responseContent": "{\"access_token\": \"eyJraWQiOiIxIiwiYWxnIjoiRVMyNTYifQ. eyJleGFtcGxlX3BhcmFtZXRlciI6ImV4YW1wbGVfdmFsdWUiLCJz dWIiOiJ0ZXN0dXNlcjAxIiwic2NvcGUiOm51bGwsImlzcyI6Imh0 dHBzOi8vYXV0aGxldGUuY29tIiwiZXhwIjoxNTkxNjkwMDQ2LCJp YXQiOjE1OTE2MDM2NDYsImNsaWVudF9pZCI6IjE3MjAxMDgzMTY2 MTYxIiwianRpIjoieHgycnNJODBER1Z4bHFLdTFQV2R4eWJSLTdB eTZWamJNcTAxY3dNYkFGUSJ9. -9RsKUSnJHmdqNtNpWbbbTah1YxTkicsabIgxrLWHtGiLsTIaEj_ q39AvKYWrmfnw5y0dfaD3qtTScxI94OSIg\", \"refresh_token\":\"4rA7H1uRZkCQ7Yd0PN98h7IUqW7zT8p1a_BAg0jEyow\", \"example_parameter\":\"example_value\", \"scope\":null, \"token_type\":\"Bearer\", \"expires_in\":86400}", "subject": "testuser01" }
上記の JWT アクセストークンの、ヘッダーとペイロードは以下の通りです。ペイロードには Extra Properties ("example_parameter":"example_value") が含まれています。
- ヘッダー
{ "kid": "1", "alg": "ES256" }
- ペイロード
{ "example_parameter": "example_value", "sub": "testuser01", "scope": null, "iss": "https://authlete.com", "exp": 1591690046, "iat": 1591603646, "client_id": "17201083166161", "jti": "xx2rsI80DGVxlqKu1PWdxybR-7Ay6VjbMq01cwMbAFQ" }
参考情報
How did we do with this article?