API 哪些网关方法支持授权?
what API Gateway methods support Authorization?
当我在 AWS API 网关 API 中创建 resource/method 时,我可以创建以下方法之一:DELETE
、GET
、HEAD
、OPTIONS
、PATCH
或 POST
.
如果我选择 GET
那么 API 网关不会传递身份验证详细信息;但是对于 POST
它确实如此。
对于 GET
,我是否应该将 cognito 凭据添加到我的 GET
的 URL?或者永远不要使用 GET
而对所有经过身份验证的调用使用 POST
?
我在 API 中的设置 Gateway/Lambda:
我创建了一个资源和两个方法:GET
和 POST
在授权设置下,我将授权设置为 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
有正确的值。
如评论所述:所有HTTP方法都支持身份验证。如果该方法配置为需要身份验证,身份验证结果 应该 包含在上下文中,以便您通过映射模板访问以作为上下文信息向下传递。
如果这对您不起作用,请更新您的问题以反映:
- 您的 API 方法是如何配置的。
- 你的映射模板是什么。
- 您在测试中看到了什么结果。
更新
您的 lambda 函数中的代码正在检查 Lambda 函数的上下文,而不是来自 API 网关的值。要访问从 API 网关传入的值,您需要使用 event.identity
而不是 context.identity
。
这只能解决您问题的一半,因为您没有使用正确的值来访问 API 网关中的身份。那将是 $context.identity.cognitoIdentityId
(假设您使用的是 Amazon Cognito 身份验证)。请参阅 mapping template reference 以获取受支持变量的完整指南。
最后,您可能要考虑使用参考的模板 。
当我在 AWS API 网关 API 中创建 resource/method 时,我可以创建以下方法之一:DELETE
、GET
、HEAD
、OPTIONS
、PATCH
或 POST
.
如果我选择 GET
那么 API 网关不会传递身份验证详细信息;但是对于 POST
它确实如此。
对于 GET
,我是否应该将 cognito 凭据添加到我的 GET
的 URL?或者永远不要使用 GET
而对所有经过身份验证的调用使用 POST
?
我在 API 中的设置 Gateway/Lambda:
我创建了一个资源和两个方法:GET
和 POST
在授权设置下,我将授权设置为 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
有正确的值。
如评论所述:所有HTTP方法都支持身份验证。如果该方法配置为需要身份验证,身份验证结果 应该 包含在上下文中,以便您通过映射模板访问以作为上下文信息向下传递。
如果这对您不起作用,请更新您的问题以反映:
- 您的 API 方法是如何配置的。
- 你的映射模板是什么。
- 您在测试中看到了什么结果。
更新
您的 lambda 函数中的代码正在检查 Lambda 函数的上下文,而不是来自 API 网关的值。要访问从 API 网关传入的值,您需要使用 event.identity
而不是 context.identity
。
这只能解决您问题的一半,因为您没有使用正确的值来访问 API 网关中的身份。那将是 $context.identity.cognitoIdentityId
(假设您使用的是 Amazon Cognito 身份验证)。请参阅 mapping template reference 以获取受支持变量的完整指南。
最后,您可能要考虑使用参考的模板