來自 API Gateway Lambda 授權方的輸出
Lambda 授權方函數的輸出是類似字典的物件,其中必須包含主要識別符 (principalId) 以及列出政策陳述式的政策文件 (policyDocument)。此輸出也可包含由鍵值對組成的 context 對應。如果 API 使用用量計劃 (apiKeySource 設為 AUTHORIZER),Lambda 授權方函數必須傳回其中一個用量計劃的 API 金鑰做為 usageIdentifierKey 屬性值。
以下示範此輸出。
在本例中,政策陳述式會指定要允許或拒絕 (Effect) API Gateway 執行服務呼叫 (Action) 指定的 API 方法 (Resource)。您可能需要根據您的授權方來控制對多個資源的存取。您可以使用萬用字元 (*) 來指定資源類型 (方法)。如需設定有效政策來呼叫 API 的資訊,請參閱「在 API Gateway 中執行 API 之 IAM 政策的陳述式參考」。
針對啟用授權的方法 ARN (例如 arn:aws:execute-api:),長度上限為 1600 位元組。路徑參數值是在執行時間所決定的大小,可能會導致 ARN 長度超過限制。發生此情況時,API 用戶端會收到 {regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]414 Request URI
too long 回應。
此外,授權方之政策陳述式輸出中所示的資源 ARN 長度目前限制為 512 個字元。因此,您不得在請求 URI 中,使用 JWT 字符長度很長的 URI。反之,您可以在請求標頭中安全傳遞此 JWT 字符。
您可以使用 principalId 變數,來存取對應範本中的 $context.authorizer.principalId 值。如果您想要將此值傳遞到後端,這會很有用。如需詳細資訊,請參閱 資料轉換的內容變數。
您可以分別呼叫 stringKey、numberKey 或 booleanKey,來存取對應範本中 "value" 對應的 "1"、"true" 或 context 值 (例如 $context.authorizer.stringKey、$context.authorizer.numberKey 或 $context.authorizer.booleanKey)。傳回的值全部都已字串化。請注意,您無法將 JSON 物件或陣列設定為 context 對應中任何金鑰的有效值。
您可以透過整合請求對應範本,使用 context 對應將快取的登入資料從授權方傳回後端。這可讓後端使用快取的登入資料來降低存取秘密金鑰的需求,並開啟每個請求的授權字符,藉此提供改善的使用者體驗。
對於 Lambda 代理整合,API Gateway 會將 context 物件從 Lambda 授權方直接傳遞至後端 Lambda 函式,做為輸入 event 的一部分。您可以呼叫 $event.requestContext.authorizer.,來擷取 Lambda 函數中的 keycontext 索引鍵/值組。
API 階段用量計劃中,{api-key} 代表 API 金鑰。如需詳細資訊,請參閱 API Gateway 中 REST API 的用量計畫和 API 金鑰。
以下顯示範例 Lambda 授權方的範例輸出。此範例輸出所包含的政策陳述式,可封鎖 (Deny) AWS 帳戶 (123456789012) 之 API (ymy8tbxw7b) dev 階段的 GET 方法呼叫。
{ "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/" } ] } }