API 哪些网关方法支持授权?

what API Gateway methods support Authorization?

当我在 AWS API 网关 API 中创建 resource/method 时,我可以创建以下方法之一:DELETEGETHEADOPTIONSPATCHPOST.

如果我选择 GET 那么 API 网关不会传递身份验证详细信息;但是对于 POST 它确实如此。

对于 GET,我是否应该将 cognito 凭据添加到我的 GET 的 URL?或者永远不要使用 GET 而对所有经过身份验证的调用使用 POST

我在 API 中的设置 Gateway/Lambda:

我创建了一个资源和两个方法:GETPOST 在授权设置下,我将授权设置为 AWS_AIM 对于此示例,没有 Request Model

在方法执行下,我将集成类型设置为 Lambda 函数并检查 Invoke with caller credentials(我还设置了 Lambda 区域和 Lambda 函数) 我没有选中 Credentials cache

对于人体贴图模板,我将 Content-Type 设置为“application/json”,将贴图模板设置为

{ "identity" : "$input.params('identity')"}

在我的 Python Lambda 函数中:

def lambda_handler(event, context):
    print context.identity
    print context.identity.cognito_identity_id

    return True

运行 Python 函数:

对于GETcontext.identity是None 因为 POST context.identity 有一个值并且 context.identity.cognito_identity_id 有正确的值。

如评论所述:所有HTTP方法都支持身份验证。如果该方法配置为需要身份验证,身份验证结果 应该 包含在上下文中,以便您通过映射模板访问以作为上下文信息向下传递。

如果这对您不起作用,请更新您的问题以反映:

  1. 您的 API 方法是如何配置的。
  2. 你的映射模板是什么。
  3. 您在测试中看到了什么结果。

更新

您的 lambda 函数中的代码正在检查 Lambda 函数的上下文,而不是来自 API 网关的值。要访问从 API 网关传入的值,您需要使用 event.identity 而不是 context.identity

这只能解决您问题的一半,因为您没有使用正确的值来访问 API 网关中的身份。那将是 $context.identity.cognitoIdentityId(假设您使用的是 Amazon Cognito 身份验证)。请参阅 mapping template reference 以获取受支持变量的完整指南。

最后,您可能要考虑使用参考的模板