【发布时间】:2019-06-29 14:46:21
【问题描述】:
我在 AWS ApiGateway 上配置/使用身份验证时遇到了一些问题。我已经使用接收 AWS 身份验证模型的代码设置了我的 lambda 函数,见下文,它基本上解码 JWT 令牌并验证给定用户是否可以访问资源:
{
"type": "TOKEN",
"authorizationToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjotMTU1LCJwcm9kdWN0IjoiQmlsbGlvblJ1biIsInBlcm1pc3Npb25fbGV2ZWwiOjEsInNhbHQiOiJzZWNyZXRfcGhyYXNlIn0.3gZUFITe8or2mPWBAZlOxdcGF6-ybykHVsMRsqoUI_8",
"methodArn": "arn:aws:execute-api:us-east-1:123456789012:example/prod/POST/{proxy+}"
}
请参阅下面的 ApiGateway 文档的示例输出。第一个是用户验证成功(授予权限),第二个是用户验证失败(权限被拒绝):
{
"principalId": "users",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": "arn:aws:execute-api:REGION:AWS_ACCOUNT:example/prod/POST/{proxy+}"
}
]
},
"context": {
"user_id": XXX,
}
}
权限被拒绝:
{
"principalId": "users",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Deny",
"Resource": "arn:aws:execute-api:REGION:AWS_ACCOUNT:example/prod/POST/{proxy+}"
}
]
}
}
问题是:每次我测试自定义授权功能时,返回状态都是200(而不是401)并且权限被授予(即使我发送了错误的令牌)。
另外,虽然屏幕显示自定义验证功能已启用,但我真的觉得它甚至没有测试任何东西。
Resource showing custom authorizer
------- 编辑 -------
这里是我如何实现输出的代码:
def generate_policy(principal_id, effect, resource, context=None):
doc = {
'principalId': principal_id,
'policyDocument': {
'Version': '2012-10-17',
'Statement': [{
'Action': 'execute-api:Invoke',
'Effect': effect,
'Resource': resource
}]
}
}
if context:
doc["context"] = context
return doc
所以你可以这样调用“允许”:
generate_policy("users", "Allow", method_arn, auth_info)
或者像这样“拒绝”:
generate_policy("users", "Deny", method_arn)
-------- 再次编辑 ------ 用我的所有代码要点:
https://gist.github.com/hermogenes-db18/1ccf3eb8273f266a3fa02643dcfd39bd
【问题讨论】:
-
你能分享你的 lambda 授权码吗?
-
您是否需要我如何实施我的政策响应?
-
是的,因为屏幕截图中附加的响应似乎不正确。
-
@AtharKhan 我编辑原帖
-
你分享了@987654333@函数代码,你能分享完整的lambda授权代码吗?
标签: python amazon-web-services aws-api-gateway