モジュール ngx_http_auth_jwt_module
サポートされているアルゴリズム 設定例 ディレクティブ auth_jwt auth_jwt_claim_set auth_jwt_header_set auth_jwt_key_cache auth_jwt_key_file auth_jwt_key_request auth_jwt_leeway auth_jwt_type auth_jwt_require 埋め込み変数 |
ngx_http_auth_jwt_module
モジュール (1.11.3) は、指定されたキーを使用して提供されたJSON Web Token (JWT) を検証することで、クライアント認証を実装します。このモジュールは、JSON Web Signature (JWS)、JSON Web Encryption (JWE) (1.19.7)、およびネストされた JWT (1.21.0) をサポートしています。このモジュールはOpenID Connect認証に使用できます。
このモジュールは、ngx_http_access_module、ngx_http_auth_basic_module、ngx_http_auth_request_moduleなどの他のアクセスモジュールと、satisfy ディレクティブを使用して組み合わせることができます。
このモジュールは、当社の商用サブスクリプションの一部として提供されています。
サポートされているアルゴリズム
このモジュールは、以下のJSON Web アルゴリズムをサポートしています。
JWS アルゴリズム
- HS256、HS384、HS512
- RS256、RS384、RS512
- ES256、ES384、ES512
- EdDSA (Ed25519 および Ed448 署名) (1.15.7)
バージョン 1.13.7 より前は、HS256、RS256、ES256 アルゴリズムのみがサポートされていました。
JWE コンテンツ暗号化アルゴリズム (1.19.7)
- A128CBC-HS256、A192CBC-HS384、A256CBC-HS512
- A128GCM、A192GCM、A256GCM
JWE キー管理アルゴリズム (1.19.9)
- A128KW、A192KW、A256KW
- A128GCMKW、A192GCMKW、A256GCMKW
- dir - 共有対称キーをコンテンツ暗号化キーとして直接使用
- RSA-OAEP、RSA-OAEP-256、RSA-OAEP-384、RSA-OAEP-512 (1.21.0)
設定例
location / { auth_jwt "closed site"; auth_jwt_key_file conf/keys.json; }
ディレクティブ
構文 |
auth_jwt |
---|---|
デフォルト |
auth_jwt off; |
コンテキスト |
http 、server 、location 、limit_except |
JSON Web Token の検証を有効にします。指定された文字列
はrealm
として使用されます。パラメータ値には変数を含めることができます。
オプションのtoken
パラメータは、JSON Web Token を含む変数を指定します。デフォルトでは、JWT はBearer Tokenとして「Authorization」ヘッダーで渡されます。JWT は、Cookie またはクエリ文字列の一部として渡すこともできます。
auth_jwt "closed site" token=$cookie_auth_token;
特殊値off
は、前の設定レベルから継承されたauth_jwt
ディレクティブの効果をキャンセルします。
構文 |
auth_jwt_claim_set |
---|---|
デフォルト | — |
コンテキスト |
http |
このディレクティブはバージョン 1.11.10 で追加されました。
キー名で識別される JWT クレームパラメータを変数
に設定します。名前の一致はJSONツリーの最上位レベルから開始されます。配列の場合、変数はコンマで区切られた配列要素のリストを保持します。
auth_jwt_claim_set $email info e-mail; auth_jwt_claim_set $job info "job title";
バージョン 1.13.7 より前は、キー名を1つしか指定できず、配列の結果は未定義でした。
JWEで暗号化されたトークンの変数値は、アクセスフェーズで発生する復号化後にのみ使用できます。
構文 |
auth_jwt_header_set |
---|---|
デフォルト | — |
コンテキスト |
http |
このディレクティブはバージョン 1.11.10 で追加されました。
キー名で識別される JOSE ヘッダーパラメータを変数
に設定します。名前の一致はJSONツリーの最上位レベルから開始されます。配列の場合、変数はコンマで区切られた配列要素のリストを保持します。
バージョン 1.13.7 より前は、キー名を1つしか指定できず、配列の結果は未定義でした。
構文 |
auth_jwt_key_cache |
---|---|
デフォルト |
auth_jwt_key_cache 0; |
コンテキスト |
http 、server 、location |
このディレクティブはバージョン 1.21.4 で追加されました。
ファイルまたはサブリクエストから取得したキーのキャッシングを有効または無効にし、それらのキャッシング時間を設定します。変数から取得したキーのキャッシングはサポートされていません。デフォルトでは、キーのキャッシングは無効になっています。
構文 |
auth_jwt_key_file |
---|---|
デフォルト | — |
コンテキスト |
http 、server 、location 、limit_except |
JWT 署名の検証のためのJSON Web Key Set形式のファイル
を指定します。パラメータ値には変数を含めることができます。
同じレベルに複数のauth_jwt_key_file
ディレクティブを指定できます (1.21.1)
auth_jwt_key_file conf/keys.json; auth_jwt_key_file conf/key.jwk;
指定されたキーの少なくとも1つを読み込めなかったり、処理できなかった場合、nginx は500(内部サーバーエラー)エラーを返します。
構文 |
auth_jwt_key_request |
---|---|
デフォルト | — |
コンテキスト |
http 、server 、location 、limit_except |
このディレクティブはバージョン 1.15.6 で追加されました。
JWT 署名の検証のためにサブリクエストからJSON Web Key Setファイルを取得し、サブリクエストが送信されるURIを設定します。パラメータ値には変数を含めることができます。検証のオーバーヘッドを避けるために、キーファイルをキャッシュすることをお勧めします。
proxy_cache_path /data/nginx/cache levels=1 keys_zone=foo:10m; server { ... location / { auth_jwt "closed site"; auth_jwt_key_request /jwks_uri; } location = /jwks_uri { internal; proxy_cache foo; proxy_pass http://idp.example.com/keys; } }
同じレベルに複数のauth_jwt_key_request
ディレクティブを指定できます (1.21.1)
auth_jwt_key_request /jwks_uri; auth_jwt_key_request /jwks2_uri;
指定されたキーの少なくとも1つを読み込めなかったり、処理できなかった場合、nginx は500(内部サーバーエラー)エラーを返します。
構文 |
auth_jwt_leeway |
---|---|
デフォルト |
auth_jwt_leeway 0s; |
コンテキスト |
http 、server 、location |
このディレクティブはバージョン 1.13.10 で追加されました。
expおよびnbf JWTクレームを検証する際のクロックスキューを補償するための最大許容範囲を設定します。
構文 |
auth_jwt_type |
---|---|
デフォルト |
auth_jwt_type signed; |
コンテキスト |
http 、server 、location 、limit_except |
このディレクティブはバージョン 1.19.7 で追加されました。
期待するJSON Web Tokenの種類を指定します:JWS (signed
)、JWE (encrypted
)、または署名してから暗号化されたネストされたJWT (nested
) (1.21.0)。
構文 |
auth_jwt_require |
---|---|
デフォルト | — |
コンテキスト |
http 、server 、location 、limit_except |
このディレクティブはバージョン 1.21.2 で追加されました。
JWT検証の追加チェックを指定します。値にはテキスト、変数、およびそれらの組み合わせを含めることができ、変数で始まる必要があります(1.21.7)。すべての値が空ではなく「0」と等しくない場合にのみ、認証が成功します。
map $jwt_claim_iss $valid_jwt_iss { "good" 1; } ... auth_jwt_require $valid_jwt_iss;
チェックのいずれかが失敗した場合、401
エラーコードが返されます。オプションのerror
パラメータ (1.21.7) により、エラーコードを403
に再定義できます。
埋め込み変数
ngx_http_auth_jwt_module
モジュールは埋め込み変数をサポートしています。
$jwt_header_
名前
- 指定されたJOSEヘッダーの値を返します。
$jwt_claim_
名前
- 指定されたJWTクレームの値を返します。
ネストされたクレームやドット(「.」)を含むクレームの場合、変数の値を評価することはできません。auth_jwt_claim_setディレクティブを使用する必要があります。
JWEで暗号化されたトークンの変数値は、アクセスフェーズで発生する復号化後にのみ使用できます。
$jwt_payload
nested
またはencrypted
トークンの復号化された最上位レベルのペイロードを返します (1.21.2)。ネストされたトークンの場合は、囲まれたJWSトークンを返します。暗号化されたトークンの場合は、クレームを含むJSONを返します。