JWK管理マスタ
物理名: jwk_master
テーブル概要
OIDC の ID トークン署名に使用する鍵を管理する。
公開鍵は JWK として配布し、秘密鍵は暗号化済みバイト列として保持する。
テーブル構造
| ColumnName | Null | Key | Type | Description |
|---|---|---|---|---|
| sequence_id | Not Null | Primary | bigint identity | レコード識別子 |
| kid | Not Null | Unique | varchar(64) | 鍵識別子 |
| kty | Not Null | - | varchar(16) | 鍵種別。RSA |
| alg | Not Null | - | varchar(16) | 署名アルゴリズム。RS256 |
| key_use | Not Null | - | varchar(16) | 鍵用途。sig |
| public_n | Not Null | - | varchar(512) | RSA 公開鍵 modulus (Base64Url) |
| public_e | Not Null | - | varchar(16) | RSA 公開鍵 exponent (Base64Url) |
| private_key_ciphertext | Not Null | - | varbinary(max) | AES-GCM 暗号化済み秘密鍵 |
| private_key_iv | Not Null | - | varbinary(12) | AES-GCM nonce |
| private_key_tag | Not Null | - | varbinary(16) | AES-GCM 認証タグ |
| create_datetime | Not Null | - | datetime2(0) | レコード作成日時 |
| update_datetime | Not Null | - | datetime2(0) | レコード更新日時 |
| status | Not Null | - | tinyint | 状態 0:無効,1:有効 |
制約
| ConstraintName | Type | Columns | Description |
|---|---|---|---|
| PK_jwk_master | Primary Key | sequence_id | レコードを一意に識別する |
| UQ_jwk_master_kid | Unique Index | kid | kid の重複を禁止する |
| IX_jwk_master_status_update_datetime | Index | status, update_datetime | 有効鍵の取得を高速化する |
参照関係
このテーブルは外部キー参照を持たない。
初期データ
初期SQLで固定データは投入しない。
アプリ起動後、OidcSigningService が有効鍵不在時に1件目を自動生成する。
API利用箇所
補足
- 秘密鍵暗号化キーは環境変数
JwkPrivateKeyEncryptionKeyを利用する。 - 署名には
status=1のうちupdate_datetimeが最新の鍵を使用する。