我正在尝试使用内置的登录对话框和AWS Chalice集成Cognito。这是我尝试的:
# This passes in correct arn for my pool, not xxxx
authorizer = CognitoUserPoolAuthorizer(
'end_users_dev', provider_arns=['arn:aws:cognito-idp:us-west-2:xxxx])
@app.route('/test', cors=True, authorizer=authorizer)
def test():
return {"result": "Success with authorizer"}
@app.route('/test2', cors=True)
def test2():
return {"result": "Success without authorizer"}
第二种方法(test2)有效,但第一种方法(test)返回(按预期):
{
"message": "Unauthorized"
}
现在,我尝试通过传递 header 来使具有授权的测试有效:
Authorization: <the token I get passed in from the
built in login page callback as "id_token">
我可以手动验证JWT token 的内容和签名,并且用户池在API网关中显示为测试资源的“授权”,但是我仍然收到相同的“未经授权”消息。我想念什么?
(注意:我也在https://forums.aws.amazon.com/message.jspa?messageID=871715#871715上发布了此消息,但2天内未收到任何回复)
最佳答案
我将检查以确保您的IAM策略 chalice 正在运行,以允许访问cognito。
您可以根据需要将它们从AmazonCognitoPowerUser策略添加到您的策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cognito-identity:*",
"cognito-idp:*",
"cognito-sync:*",
"iam:ListRoles",
"iam:ListOpenIdConnectProviders",
"sns:ListPlatformApplications"
],
"Resource": "*"
}
]
}
如下面的链接所示:
每当使用chalice部署应用程序时,自动生成的策略都会写入/.chalice/policy.json的磁盘中。运行chalice deploy命令时,还可以指定--no-autogen-policy选项。这样做将导致 chalice CLI加载/.chalice/policy.json文件,并将该文件用作IAM角色的策略。如果您想完全控制要与IAM角色关联的IAM策略,则可以手动编辑此文件并指定--no-autogen-policy。
”
如政策部分所示:https://github.com/aws/chalice
$ chalice gen-policy
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"*"
],
"Effect": "Allow",
"Sid": "9155de6ad1d74e4c8b1448255770e60c"
}
]
}
关于aws-api-gateway - 使用Chalice和Cognito授权者创建的Api返回 “Unauthorized”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52765636/