Authlete サービスの JWK セット設定

Authlete サービスの JWK セット設定

はじめに

本記事では、サービスに JWK セットを登録する方法について説明します。
JWK セットの準備


まず何らかの方法により、JWK セットを用意します。以下は mkjwk.org サービスを用いて ES256 の鍵ペアを作成する例です。ここでは以下の通り選択・入力しています。

  • 鍵タイプ: EC (Elliptic Curve)
  • 曲線: P-256
  • 鍵の用途: Signing
  • アルゴリズム: ES256
  • 鍵の ID: 1
スクリーンショット_2019-12-17_16
Generating a JWK Set using mkjwk

サービス管理者コンソール経由での JWK セットの登録

生成された “公開鍵と秘密鍵を含む JWK Set” を、対象サービス設定の「JWK Set (JWK セット)」にある「JWK Set Content (JWK セットの内容)」の項目に追加し、「更新」ボタンを押下します。

スクリーンショット_2019-12-17_16
JWK Set Content

これにより、サービスへの JWK セットドキュメントの登録が完了しました。

Authlete API 経由での JWK セットの登録

前述の Web ベースの管理者コンソールを用いる代わりに、Authlete のサービス管理 API を用いて JWK セットを登録することも可能です。以下は /service/update API にリクエストする例です。“jwks” キーの値として JWK セットを指定しています。

1. 対象サービスの設定情報を取得

/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

2. 設定情報に新たな JWK セットを追加

以下の 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"

3. 新しい設定情報を用いてサービスを更新

/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\"
    }
]}"
[...]