本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 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:
,長度上限為 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
值。如果您想要將此值傳遞到後端,這會很有用。如需詳細資訊,請參閱 $context 資料模型、授權方、映射範本和 CloudWatch 存取記錄的變數。
您可以分別呼叫 stringKey
、numberKey
或 booleanKey
,來存取對應範本中 "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.
,來擷取 Lambda 函數中的 key
context
索引鍵/值組。
{api-key}
代表API階段使用計畫中的索引API鍵。如需詳細資訊,請參閱API Gateway RESTAPIs中 的使用計劃和API金鑰 。
以下顯示範例 Lambda 授權方的範例輸出。範例輸出包含政策陳述式,用於封鎖 (Deny
) 呼叫 AWS 帳戶 () dev
階段GET
的方法 (APIymy8tbxw7b
)123456789012
。
{ "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/" } ] } }