什么API网关方法支持授权?

时间:2016-03-27 11:03:40

标签: aws-api-gateway

当我在AWS API Gateway API中创建资源/方法时,我可以创建以下方法之一:DELETEGETHEADOPTIONS,{{ 1}}或PATCH

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

对于POST,我应该将Cognito凭据添加到GET的网址吗?或者永远不要使用GET并使用GET进行所有经过身份验证的来电?

我在API网关/ Lambda中的设置:

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

在方法执行下我将集成类型设置为Lambda函数,然后检查Request Model(我还设置了Lambda Region和Lambda函数) 我未选中Invoke with caller credentials

对于Body Mapping模板,我将Credentials cache设置为`application / json',将映射模板设置为

Content-Type

在我的Python Lambda函数中:

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

运行Python函数:

对于def lambda_handler(event, context): print context.identity print context.identity.cognito_identity_id return True context.identity为None 对于GET context.identity有一个值,POST具有正确的值。

1 个答案:

答案 0 :(得分:2)

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

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

  1. 如何配置API方法。
  2. 您的地图模板是什么。
  3. 您在测试中看到了什么结果。
  4. <强>更新

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

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

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