0

我正在尝试使用 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"
}

现在我尝试通过传入一个标头来使授权测试工作:

Authorization: <the token I get passed in from the 
built in login page callback as "id_token">

我可以手动验证 JWT 令牌内容和签名,并且用户池在 API Gateway 中显示为测试资源的“授权”,但我仍然收到相同的“未授权”消息。我错过了什么?

(注意:我也在https://forums.aws.amazon.com/message.jspa?messageID=871715#871715上发布了此内容,但 2 天内没有收到任何回复)

4

1 回答 1

4

我会检查以确保您的 IAM 策略圣杯正在运行,允许访问 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"
    }
  ]
}
于 2018-10-18T19:51:06.970 回答