從 API Gateway Lambda 授權方輸出 - Amazon API Gateway

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

從 API Gateway Lambda 授權方輸出

Lambda 授權方函數的輸出是類似字典的物件,其中必須包含主要識別符 (principalId) 以及列出政策陳述式的政策文件 (policyDocument)。此輸出也可包含由鍵值對組成的 context 對應。如果 API使用用量計劃 ( apiKeySource 設定為 AUTHORIZER),則 Lambda 授權方函數必須將其中一個用量計劃API金鑰傳回為 usageIdentifierKey 屬性值。

以下示範此輸出。

{   "principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client. "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow|Deny", "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]" } ] }, "context": { "stringKey": "value", "numberKey": "1", "booleanKey": "true" }, "usageIdentifierKey": "{api-key}" }

在此,政策陳述式指定是否允許或拒絕 (Effect) API Gateway 執行服務來叫用 (Action) 指定的API方法 ()Resource。您可以使用萬用字元 (*) 來指定資源類型 (方法)。如需設定呼叫 之有效政策的相關資訊API,請參閱 API在API閘道中執行之IAM政策的陳述式參考

對於啟用授權的方法 ARN,例如 arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]],長度上限為 1600 位元組。路徑參數值是在執行時間決定的大小,可能會導致ARN長度超過限制。發生這種情況時,API用戶端會收到414 Request URI too long回應。

此外,如授權方的政策陳述式輸出所示ARN,資源 目前長度限制為 512 個字元。因此,您不得URI在請求 中使用具有重要長度的JWT權杖URI。您可以改為在請求標頭中安全地傳遞JWT權杖。

您可以使用 principalId 變數,來存取對應範本中的 $context.authorizer.principalId 值。如果您想要將此值傳遞到後端,這會很有用。如需詳細資訊,請參閱 $context 資料模型、授權方、映射範本和 CloudWatch 存取記錄的變數

您可以分別呼叫 stringKeynumberKeybooleanKey,來存取對應範本中 "value" 對應的 "1""true"context 值 (例如 $context.authorizer.stringKey$context.authorizer.numberKey$context.authorizer.booleanKey)。傳回的值全部都已字串化。請注意,您無法將JSON物件或陣列設定為context地圖中任何索引鍵的有效值。

您可以透過整合請求對應範本,使用 context 對應將快取的登入資料從授權方傳回後端。這可讓後端使用快取的登入資料來降低存取秘密金鑰的需求,並開啟每個請求的授權字符,藉此提供改善的使用者體驗。

對於 Lambda 代理整合,APIGateway 會將context物件從 Lambda 授權方直接傳遞到後端 Lambda 函數,作為輸入 的一部分event。您可以呼叫 $event.requestContext.authorizer.key,來擷取 Lambda 函數中的 context 索引鍵/值組。

{api-key} 代表API階段使用計畫中的索引API鍵。如需詳細資訊,請參閱API Gateway RESTAPIs中 的使用計劃和API金鑰

以下顯示範例 Lambda 授權方的範例輸出。範例輸出包含政策陳述式,用於封鎖 (Deny) 呼叫 AWS 帳戶 () dev階段GET的方法 (APIymy8tbxw7b123456789012

{ "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/" } ] } }