【问题标题】:Api created with Chalice and a Cognito authorizer returns “Unauthorized”使用 Chalice 创建的 Api 和 Cognito 授权方返回“未授权”
【发布时间】:2018-11-13 23:56:15
【问题描述】:

我正在尝试使用内置登录对话框将 Cognito 与 AWS Chalice 集成。这是我尝试过的:

# 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发了这个帖子,但是两天没收到回复)

【问题讨论】:

    标签: aws-api-gateway amazon-cognito chalice


    【解决方案1】:

    我会检查以确保您的 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"
        }
      ]
    }
    

    【讨论】:

    • 哦!所以听起来我最好的选择是运行 chalice gen-policy,然后用您在顶部提供的 sn-p 替换 policy.json 中的内容?
    • 耶!有效。注意,我已经有一个 policy.json,所以不需要运行 gen-policy。奖励赏金。
    • 嗯,它现在不能在我的一个环境中工作。我可以在 Lambda 或网关控制台中的某个位置查看 AWS UI 中的策略吗? (在一种情况下,策略文件似乎在部署时被覆盖,而在另一种情况下却没有)
    • 是的,您可以登录控制台来验证 lambda 上的策略。但是您需要将自定义策略放在这里 /.chalice/policy.json 并将 --no-autogen-policy 标志添加到 chalice update 命令。
    • 啊。凉爽的。实际上,我注意到 autogen 无法正常工作的原因是因为我为该环境设置了错误的 CognitoUserPoolAuthorizer。再次感谢!
    猜你喜欢
    • 2018-11-19
    • 2019-12-12
    • 2019-11-18
    • 1970-01-01
    • 2022-11-10
    • 2018-11-16
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多