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 驗證。

此模組可以透過 satisfy 指令,與其他存取模組結合使用,例如 ngx_http_access_modulengx_http_auth_basic_modulengx_http_auth_request_module

此模組作為我們商業訂閱的一部分提供。

支援的演算法

此模組支援下列 JSON Web 演算法

JWS 演算法

在 1.13.7 版本之前,僅支援 HS256、RS256、ES256 演算法。

JWE 內容加密演算法 (1.19.7)

JWE 金鑰管理演算法 (1.19.9)

組態範例

location / {
    auth_jwt          "closed site";
    auth_jwt_key_file conf/keys.json;
}

指令

語法 auth_jwt 字串 [token=$變數] | off;
預設值
auth_jwt off;
內容 httpserverlocationlimit_except

啟用 JSON Web Token 的驗證。指定的 字串 用作 realm。參數值可以包含變數。

選用的 token 參數指定包含 JSON Web Token 的變數。依預設,JWT 在「Authorization」標頭中以 Bearer Token 的形式傳遞。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 版本之前,只能指定一個金鑰名稱,且陣列的結果未定義。

使用 JWE 加密的權杖變數值僅在解密後才可用,解密發生在 存取階段期間。

語法 auth_jwt_header_set $變數 名稱 ...;
預設值
內容 http

此指令出現在 1.11.10 版本中。

變數 設定為由金鑰名稱識別的 JOSE 標頭參數。名稱比對從 JSON 樹的頂層開始。對於陣列,變數會保留由逗號分隔的陣列元素清單。

在 1.13.7 版本之前,只能指定一個金鑰名稱,且陣列的結果未定義。

語法 auth_jwt_key_cache 時間;
預設值
auth_jwt_key_cache 0;
內容 httpserverlocation

此指令出現在 1.21.4 版本中。

啟用或停用從檔案或從子請求取得的金鑰快取,並設定它們的快取時間。不支援從變數取得的金鑰快取。依預設,會停用金鑰快取。

語法 auth_jwt_key_file 檔案;
預設值
內容 httpserverlocationlimit_except

JSON Web Key Set 格式指定用於驗證 JWT 簽章的 檔案。參數值可以包含變數。

可以在同一層級上指定多個 auth_jwt_key_file 指令 (1.21.1)

auth_jwt_key_file conf/keys.json;
auth_jwt_key_file conf/key.jwk;

如果至少有一個指定的金鑰無法載入或處理,nginx 將傳回 500 (內部伺服器錯誤) 錯誤。

語法 auth_jwt_key_request uri;
預設值
內容 httpserverlocationlimit_except

此指令出現在 1.15.6 版本中。

允許從子請求擷取 JSON Web Key Set 檔案以驗證 JWT 簽章,並設定子請求將傳送到的 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;

如果至少有一個指定的金鑰無法載入或處理,nginx 將傳回 500 (內部伺服器錯誤) 錯誤。

語法 auth_jwt_leeway 時間;
預設值
auth_jwt_leeway 0s;
內容 httpserverlocation

此指令出現在 1.13.10 版本中。

設定驗證 expnbf JWT 宣告時,為補償時鐘偏差所允許的最大寬限值。

語法 auth_jwt_type signed | encrypted | nested;
預設值
auth_jwt_type signed;
內容 httpserverlocationlimit_except

此指令出現在 1.19.7 版本中。

指定要預期的 JSON Web Token 類型:JWS (signed)、JWE (encrypted) 或先簽署再加密的巢狀 JWT (nested) (1.21.0)。

語法 auth_jwt_require $值 ... [error=401 | 403] ;
預設值
內容 httpserverlocationlimit_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
傳回 nestedencrypted 權杖的解密頂層酬載 (1.21.2)。對於巢狀權杖,傳回封閉的 JWS 權杖。對於加密權杖,傳回具有宣告的 JSON。