哪些API网关方法支持授权



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

如果我选择GET,那么API网关不会通过身份验证详细信息;但对于CCD_ 8来说确实如此。

对于GET,我应该将cognito凭据添加到我的GET的URL中吗?还是永远不使用GET,对所有经过身份验证的呼叫使用POST

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

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

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

对于Body Mapping Templates,我将Content-Type设置为"application/json",将Mapping Template设置为

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

在我的Python Lambda函数中:

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

运行Python函数:

对于GET上下文,identity为None对于POST上下文,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 auth)。有关支持变量的完整指南,请参阅映射模板参考。

最后,您可能需要考虑使用本问题中引用的模板。

相关内容

  • 没有找到相关文章

最新更新