本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 驗證
完成下列任務:
-
向 IdP 註冊您的服務,其會發出用戶端 ID 和用戶端秘密。
-
單獨呼叫 IdP 以請求存取服務。IdP 會以存取字符回應。此字符通常是由 IdP 簽署的 JWT。
-
設定 JSON Web 金鑰集 (JWKS) 端點。負載平衡器會在您設定的已知位置取得 IdP 發佈的公有金鑰。
-
在請求標頭中包含 JWT,並在每個請求中將其轉送至 Application Load Balancer。
使用主控台設定 JWT 驗證
-
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格的 Load Balancing (負載平衡器),選擇 Load Balancer (負載平衡器)。
-
選取您的 Application Load Balancer,然後選擇接聽程式索引標籤。
-
選取 HTTPS 接聽程式,然後選擇管理規則。
-
選擇新增規則。
-
(選用) 若要指定規則的名稱,請展開名稱和標籤,然後輸入名稱。若要新增其他標籤,請選擇新增其他標籤,然後輸入標籤索引鍵和標籤值。
-
在條件下,定義 1-5 個條件值
-
(選用) 若要新增轉換,請選擇新增轉換、選擇轉換類型,然後輸入要比對的規則運算式和替代字串。
-
針對動作、預先路由動作,選擇驗證權杖。
-
對於 JWKS 端點,輸入 JSON Web 金鑰集端點的 URL。此端點必須可公開存取,並傳回用於驗證 JWT 簽章的公有金鑰。
-
對於發行者,在您的 JWT 權杖中輸入 iss 宣告的預期值。
-
(選用) 若要驗證其他宣告,請選擇其他宣告。
在宣告名稱中,輸入要驗證的宣告名稱。
針對格式,選擇應如何解譯宣告值:
-
單一字串:宣告必須完全符合一個指定的值。
-
字串陣列:宣告必須符合陣列中的其中一個值。
-
空格分隔值:宣告包含空格分隔值,必須包含指定的值。
-
-
在值中,輸入宣告的預期值。
-
針對其他宣告重複 (最多 10 個宣告)。
-
-
對於動作、路由動作,選取成功驗證權杖後應執行的主要動作 (轉送至、重新導向至或傳回固定回應)。
-
視需要設定主要動作
-
選擇儲存。
使用 CLI 設定 JWT 驗證
使用下列 create-rule 命令來設定 JWT 驗證 。
使用 動作建立接聽程式規則來驗證 JWTs。接聽程式必須是 HTTPS 接聽程式。
aws elbv2 create-rule \ --listener-arnlistener-arn\ --priority10\ --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 的接聽程式規則。