Table of Contents
本記事では、サービスに JWK セットを登録する方法について説明します。
JWK セットの準備
まず何らかの方法により、JWK セットを用意します。以下は mkjwk.org サービスを用いて ES256 の鍵ペアを作成する例です。ここでは以下の通り選択・入力しています。
生成された “公開鍵と秘密鍵を含む JWK Set” を、対象サービス設定の「JWK Set (JWK セット)」にある「JWK Set Content (JWK セットの内容)」の項目に追加し、「更新」ボタンを押下します。
これにより、サービスへの JWK セットドキュメントの登録が完了しました。
前述の Web ベースの管理者コンソールを用いる代わりに、Authlete のサービス管理 API を用いて JWK セットを登録することも可能です。以下は /service/update API にリクエストする例です。“jwks” キーの値として JWK セットを指定しています。
/service/get API を用いて、サービスの設定情報を取得します。
curl -s {Authlete API}/service/get/{Service API Key} \
-u {Service Owner API Key}:{Service Owner API Secret} \
-H 'Content-type: application/json' \
> service.json
以下の Key/Value を JWK セットとして、上記にて取得した JSON 形式の設定情報に追加し、それを updated-service.json として保存します。
{
"jwks": {
"keys": [
{
"kty": "EC",
"d": "eb4BggIO87SUjzP1M56MeXj0NQajWBwpwiDq8yoL5n4",
"use": "sig",
"crv": "P-256",
"kid": "2019-07-25_02",
"x": "f8a6jovcRTNLDWi3_c62YcW_3ZN-GH1RkiVOZgSgIYI",
"y": "EB3R8W12a3tgZfNer1RP0DizT3qpRybGw_krfsE0JzY",
"alg": "ES256"
}
]
}
}
もし複数の JWK を登録する場合、どの JWK を用いて署名するかを指定します。たとえば ID トークンの署名に、“kid”:“2019-07-25_02” のキー ID により識別される JWK を用いる場合には、以下の Key/Value を併せて追加します。(idTokenSignatureKeyId については API リファレンス をご参照ください)
"idTokenSignatureKeyId": "2019-07-25_02"
/service/update API を用いて、上記の JWK セットを含む、新しい設定情報を読み込ませます。
cat updated-service.json | \
curl -s -X PUT {Authlete API}/service/update/{Service API Key} \
-u {Service Owner API Key}:{Service Owner API Secret} \
-H 'Content-type: application/json' \
-d @-
すると、新たに “jwks” が、以下のように出力結果に含まれるはずです。
[...]
"jwks": "{\"keys\":[
{
\"kty\":\"EC\",
\"d\":\"eb4BggIO87SUjzP1M56MeXj0NQajWBwpwiDq8yoL5n4\",
\"use\":\"sig\",
\"crv\":\"P-256\",
\"kid\":\"2019-07-25_02\",
\"x\":\"f8a6jovcRTNLDWi3_c62YcW_3ZN-GH1RkiVOZgSgIYI\",
\"y\":\"EB3R8W12a3tgZfNer1RP0DizT3qpRybGw_krfsE0JzY\",
\"alg\":\"ES256\"
}
]}"
[...]