добавление бессерверных API в качестве сервера ресурсов AWS cognito AWS api gateway

#amazon-cognito #serverless-framework #serverless

#amazon-cognito #бессерверная платформа #бессерверный

Вопрос:

Здравствуйте, я использую бессерверные API-интерфейсы с использованием aws api gateway lambda proxy, golang и aws cognito

    events:
      - http:
          path: myendpoint
          method: get
          cors: true
          authorizer:
            name: my-authorizer
            arn: {COGNITO_POOL_ARN}

plugins:
  - serverless-domain-manager

custom:
  customDomain:
    domainName: mydomain.com
    basePath: mybasepath
    stage: ${self:provider.stage}
    createRoute53Record: true
  

это позволяет мне отправлять запросы с использованием токена ID mydomain.com/mybasepath/myendpoint , я хочу сделать его более стандартным и использовать токены доступа.

он не будет принимать токен доступа, авторизатор API Gateway отскочит от него.

Я добавил это в Resource Server настройки пула пользователей Cognito

Resourceserversetup

в App client settings I проверьте ресурс для клиента приложения

введите описание изображения здесь

Я выхожу из системы, создаю новый сеанс для пользователя, новые токены, и я получаю 401 Unathorized Я думаю, что я правильно следую документации, как здесь, может быть, я что-то упускаю или, возможно, потому, что это бессерверный api, мне нужна другая настройка.

Любая помощь или рекомендации будут полностью оценены.

Ответ №1:

Если вы просто хотите защитить свой api с помощью cognito, нет необходимости создавать области. Области не предоставляют разрешения пользователю, они предоставляют их приложениям.

API Gateway Cognito Authorizer работает в основном в трех режимах:

  1. Разрешить как токен идентификатора, так и токен доступа (для ресурса не задана проверка токена и не задана область действия)
  2. Разрешить токен идентификатора (для проверки токена установлен идентификатор aud утверждения / приложения, а для ресурса не задана область действия)
  3. Разрешить токен доступа (проверка токена не установлена, область действия установлена для ресурса)

Это является следствием следующего в каждом конкретном случае:

  1. Оба токена ID и токены доступа подписаны ключами подписи Cognito, поэтому авторизатор не может отличить их друг от друга.
  2. Только токены ID содержат утверждения aud (audience) для выполнения проверки токена.
  3. Только маркеры доступа включают scope утверждения для выполнения проверки.

Надеюсь, это прояснит ситуацию. Не зацикливайтесь на областях, если вы не знаете, для чего вы их используете.

Комментарии:

1. Спасибо за ответ, когда я отправляю токен доступа в запросе, авторизатор API gateway отклоняет запрос с отказом в доступе 401. Где я должен указать тип токена, который принимает авторизатор? или измените режим, в котором он работает? Заранее спасибо,

2. @FranciscoArias Чтобы разрешить исключительно токены доступа, убедитесь, что в вашем авторизаторе не установлена проверка токенов. Затем установите область действия для ресурсов API.

3. Спасибо, да, это то, что мне нужно было сделать, я нашел документацию docs.aws.amazon.com/apigateway/latest/developerguide/… И если вы используете бессерверную платформу, вам понадобится этот плагин serverless.com/plugins/serverless-oauth-scopes еще раз спасибо , брат