【问题标题】:what API Gateway methods support Authorization?哪些 API Gateway 方法支持授权?
【发布时间】:2023-03-22 14:09:01
【问题描述】:

当我在 AWS API Gateway API 中创建资源/方法时,我可以创建以下方法之一:DELETEGETHEADOPTIONSPATCHPOST

如果我选择GET,那么 API Gateway 不会通过身份验证详细信息;但对于POST 确实如此。

对于GET,我应该将认知凭据添加到我的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 函数:

对于GET,context.identity 为 None 因为POST context.identity 有一个值,context.identity.cognito_identity_id 有正确的值。

【问题讨论】:

  • 所有方法都支持身份验证。您确定在测试之前为该方法启用了身份验证吗?

标签: aws-api-gateway


【解决方案1】:

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

如果这不适合您,请更新您的问题以反映:

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

更新

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

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

最后,您可能要考虑使用引用的模板in this question

【讨论】:

  • 感谢鲍勃。我现在可以看到,我可以使用 context.identity.cognito_identity_id 从我的 Lambda 函数中访问用户的 id,而不是在我的 APIG 映射模板中指定任何内容。干净多了。我知道你必须提供一个干净的解决方案 :) 只是花了一段时间才解决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多