JWT Policy
概要
JWT (JSON Web Token) ポリシーは、API リクエストに含まれるトークンを検証するために使用されます。これにより、プロジェクトの正しい JWT KEY と SECRET を使用して生成された有効なトークンを持つユーザーのみが API にアクセスできることが保証されます。
このポリシーは、RequiredPath または NotRequiredPath モードを使用して選択したパスに基づくトークン検証をサポートします。さらに、トークンの無効化をログアウト時に行うために、tokenBlacklistLogoutPath 関数と組み合わせることができます。
サポートされているアルゴリズム:
- HS256 (HMAC SHA-256)
- RS256 (RSA SHA-256)
JWT トークンルール
APIM で JWT トークンを正常に認証するには:
- JWT トークンは Authorization ヘッダーに含める必要があります:
Authorization: bearer JWT_TOKEN
- トークンのペイロードには次の内容が含まれている必要があります:
- "apim_key_claim_name" プロジェクトの JWT KEY。
- "exp" トークンの有効期限を示すフィールド。
例のペイロード:
"apim_key_claim_name": "64c44d593be841bcec7fe768184e4c7e",
"exp": 1900000000
例のヘッダー:
"alg": "HS256",
"typ": "JWT"
JWT サンプルトークン:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGltX2tleV9jbGFpbV9uYW1lIjoiNjRjNDRkNTkzYmU4NDFiY2VjN2ZlNzY4MTg0ZTRjN2UiLCJleHAiOjE5MDAwMDAwMDB9.1kB5k-vM2Cef7ZYTyJUQ-LsDUmG4K7sJUfrJ3FqgYxQ
設定の詳細
JWT パスマッチング
JWT 検証は、2 つのモードを使用して選択したパスに適用できます:
Option | Description |
---|---|
RequiredPath | リストされたメソッド/パスのペアにのみ JWT 認証を適用します。他のすべてのパスは JWT を必要としません。 |
NotRequiredPath | リストされたものを除くすべてのパスに JWT 認証を適用します。 |
注記
一度に使用できるモードは 1 つ (RequiredPath または NotRequiredPath) のみです。モードを切り替えると、以前の設定はリセットされます。
入力フォーマット:
Method_Path
例:
GET_/v1/test
/v1/test での GET リクエストに適用されます
POST_/v1/example
/v1/example への POST に適用されます
ANY_/v1/apis
/v1/apis へのすべての HTTP メソッドに適用されます
GET_/v1/apis*
/v1/apis のすべてのサブパスに適用されます (例: /v1/apis/a)
tokenBlacklistLogoutPath
この機能により、APIM はログアウトリクエストが行われ、API Gateway から HTTP 200 が正常に返されると、JWT トークンをブラックリストに追加できます。
トグルフィールド:
フィールド | 説明 |
---|---|
useJWTBlacklistRevoking | 有効にすると、JWT トークンはログアウト応答時にブラックリストストレージに追加されます。これにより、同じトークンのさらなる使用が防止されます。 |
注記
変更できません: このポリシーが削除されるのを防ぐためのトグル。
設定値を変更できません: セットアップ後に構成値の変更を防ぐためのトグル。
Redis 設定 (ブラックリストトークンを保存するために使用)
オプション 1: APIMRedis - デフォルトのシステム Redis; 手動設定は不要です。
オプション 2: CustomRedis
Configuration Field | Description |
---|---|
Redis Host | Redis サーバーのアドレス (例: 127.0.0.1)。 |
Redis Port | Redis サーバーのポート番号 (例: 6379)。 |
Redis Password | 認証用のパスワード。 |
Redis Database | 使用するデータベースインデックスを指定します (例: 1)。 |
Redis Pool Size | Redis 接続プール内の最大接続数 (デフォルト: 1000)。 |
Redis Pool Backlog | 利用可能な接続を待っている最大リクエスト数 (デフォルト: 30)。 |
オプション 3: RedisCluster
Configuration Field | Description |
---|---|
Redis Cluster Nodes | クラスターノードのアドレス (例: redis-cluster.apim:6379)。 |
Redis Cluster Password | 認証用のパスワード。 |
Redis Cluster Name | クラスター名を指定します (例: kong_redis_cluster)。 |
Redis Connect Timeout | Redis接続を確立するためのタイムアウト (デフォルト: 1000ms)。 |
Redis Read Timeout | Redisからデータを読み取るためのタイムアウト (デフォルト: 1000ms)。 |
Redis Send Timeout | Redisにデータを送信するためのタイムアウト (デフォルト: 1000ms)。 |
Redis Pool Size | Redis接続プール内の最大接続数 (デフォルト: 1000)。 |
Redis Pool Backlog | 最大保留接続数 (デフォルト: 30)。 |
Redis Keepalive Timeout | Redis接続が閉じられる前の最大アイドル時間 (デフォルト: 55000ms)。 |