使用 Application Load Balancer 驗證 JWTs - ELB

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

使用 Application Load Balancer 驗證 JWTs

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

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

  • 單一字串:單一文字值

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

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

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

準備使用 JWT 驗證

完成下列任務:

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

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

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

  4. 在請求標頭中包含 JWT,並在每個請求中將其轉送至 Application Load Balancer。

使用主控台設定 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 的接聽程式規則