使用 Application Load Balancer 驗證 JWTs - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Application Load Balancer 驗證 JWTs

您可以設定 Application Load Balancer (ALB) 來驗證用戶端提供的 JSON Web Token (JWT),以進行安全service-to-service(S2S) machine-to-machine(M2M) 通訊。無論 JWT 的發出方式為何,負載平衡器都可以驗證 JWT,無需人為互動。

ALB 將驗證字符簽章,並需要兩個強制性宣告:'iss' (發行者) 和 'exp' (過期)。此外,如果字符中存在,ALB 也會驗證 'nbf' (而不是之前) 和 'iat' (在時間發出) 宣告。您最多可以設定 10 個額外的宣告進行驗證。這些宣告支援三種格式:

  • 單一字串:單一文字值

  • 空格分隔值:以空格分隔的多個值 (最多 10 個值)

  • String-array:文字值的陣列 (最多 10 個值)

如果權杖有效,負載平衡器會像往目標一樣使用權杖轉送請求。否則,它會拒絕請求。

準備使用 JWT 驗證

完成下列任務:

  1. 向 IdP 註冊您的服務,IdP 會發出用戶端 ID 和用戶端秘密。

  2. 單獨呼叫 IdP 以請求存取服務。IdP 會以存取字符回應。此字符通常是由 IdP 簽署的 JWT。

  3. 設定 JSON Web 金鑰集 (JWKS) 端點。負載平衡器會在您設定的已知位置取得 IdP 發佈的公有金鑰。

  4. 在請求標頭中包含 JWT,並在每個請求中將其轉送至 Application Load Balancer。注意:僅支援 RS256 演算法

使用主控台設定 JWT 驗證

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 Load Balancing (負載平衡器),選擇 Load Balancer (負載平衡器)

  3. 選取您的 Application Load Balancer,然後選擇接聽程式索引標籤。

  4. 選取 HTTPS 接聽程式,然後選擇管理規則

  5. 選擇新增規則

  6. (選用) 若要指定規則的名稱,請展開名稱和標籤,然後輸入名稱。若要新增其他標籤,請選擇新增其他標籤,然後輸入標籤索引鍵和標籤值。

  7. 條件下,定義 1-5 個條件值

  8. (選用) 若要新增轉換,請選擇新增轉換、選擇轉換類型,然後輸入要比對的規則運算式和替代字串。

  9. 針對動作、預先路由動作,選擇驗證字符。

    1. 針對 JWKS 端點,輸入 JSON Web 金鑰集端點的 URL。此端點必須可公開存取,並傳回用於驗證 JWT 簽章的公有金鑰。

    2. 對於發行者,在您的 JWT 權杖中輸入 iss 宣告的預期值。

    3. (選用) 若要驗證其他宣告,請選擇其他宣告。

      1. 針對宣告名稱,輸入要驗證的宣告名稱。

      2. 針對格式,選擇應如何解譯宣告值:

        1. 單一字串:宣告必須完全符合一個指定的值。

        2. 字串陣列:宣告必須符合陣列中的其中一個值。

        3. 空格分隔值:宣告包含空格分隔值,必須包含指定的值。

      3. 中,輸入宣告的預期值。

      4. 針對其他宣告重複 (最多 10 個宣告)。

  10. 對於動作、路由動作,選取成功驗證權杖後應執行的主要動作 (轉送至、重新導向至或傳回固定回應)

  11. 視需要設定主要動作

  12. 選擇儲存

使用 CLI 設定 JWT 驗證

使用下列 create-rule 命令來設定 JWT 驗證 。

使用 動作建立接聽程式規則來驗證 JWTs。接聽程式必須是 HTTPS 接聽程式。

aws elbv2 create-rule \ --listener-arn listener-arn \ --priority 10 \ --conditions Field=path-pattern,Values="/login" \ --actions file://actions.json

以下是指定 jwt-validation動作和 forward動作的 actions.json 檔案範例。請依照身分提供者提供的文件來判斷受支援的欄位

--actions '[ { "Type":"jwt-validation", "JwtValidationConfig":{ "JwksEndpoint":"https://issuer.example.com/.well-known/jwks.json", "Issuer":"https://issuer.com" }, "Order":1 }, { "Type":"forward", "TargetGroupArn":"target-group-arn", "Order":2 } ]'

下列範例會指定要驗證的其他宣告。

--actions '[ { "Type":"jwt-validation", "JwtValidationConfig":{ "JwksEndpoint":"https://issuer.example.com/.well-known/jwks.json", "Issuer":"https://issuer.com", "AdditionalClaims":[ { "Format":"string-array", "Name":"claim_name", "Values":["value1","value2"] } ], }, "Order":1 }, { "Type":"forward", "TargetGroupArn":"target-group-arn", "Order":2 } ]'

如需詳細資訊,請參閱Application Load Balancer 的接聽程式規則