Api, созданный с помощью Chalice и авторизатора Cognito, возвращает «Unauthorized» - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь интегрировать 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, но не получил ответа в течение 2 дней)

1 Ответ

0 голосов
/ 18 октября 2018

Я бы проверил, чтобы ваша чаша политики 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/policy.json. Когда вы запускаете команду развертывания чаши, вы также можете указатьОпция --no-autogen-policy. В результате CLI загружает файл /.chalice/policy.json и использует этот файл в качестве политики для роли IAM. Вы можете вручную отредактировать этот файл и указать --no-autogen-policy, если вы хотите иметь полный контроль над тем, какую политику IAM связать с ролью IAM.

"

Как показано в разделе политики здесь: https://github.com/aws/chalice

$ chalice gen-policy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow",
      "Sid": "9155de6ad1d74e4c8b1448255770e60c"
    }
  ]
}
...