#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
в App client settings
I проверьте ресурс для клиента приложения
Я выхожу из системы, создаю новый сеанс для пользователя, новые токены, и я получаю 401 Unathorized Я думаю, что я правильно следую документации, как здесь, может быть, я что-то упускаю или, возможно, потому, что это бессерверный api, мне нужна другая настройка.
Любая помощь или рекомендации будут полностью оценены.
Ответ №1:
Если вы просто хотите защитить свой api с помощью cognito, нет необходимости создавать области. Области не предоставляют разрешения пользователю, они предоставляют их приложениям.
API Gateway Cognito Authorizer работает в основном в трех режимах:
- Разрешить как токен идентификатора, так и токен доступа (для ресурса не задана проверка токена и не задана область действия)
- Разрешить токен идентификатора (для проверки токена установлен идентификатор
aud
утверждения / приложения, а для ресурса не задана область действия) - Разрешить токен доступа (проверка токена не установлена, область действия установлена для ресурса)
Это является следствием следующего в каждом конкретном случае:
- Оба токена ID и токены доступа подписаны ключами подписи Cognito, поэтому авторизатор не может отличить их друг от друга.
- Только токены ID содержат утверждения
aud
(audience) для выполнения проверки токена. - Только маркеры доступа включают
scope
утверждения для выполнения проверки.
Надеюсь, это прояснит ситуацию. Не зацикливайтесь на областях, если вы не знаете, для чего вы их используете.
Комментарии:
1. Спасибо за ответ, когда я отправляю токен доступа в запросе, авторизатор API gateway отклоняет запрос с отказом в доступе 401. Где я должен указать тип токена, который принимает авторизатор? или измените режим, в котором он работает? Заранее спасибо,
2. @FranciscoArias Чтобы разрешить исключительно токены доступа, убедитесь, что в вашем авторизаторе не установлена проверка токенов. Затем установите область действия для ресурсов API.
3. Спасибо, да, это то, что мне нужно было сделать, я нашел документацию docs.aws.amazon.com/apigateway/latest/developerguide/… И если вы используете бессерверную платформу, вам понадобится этот плагин serverless.com/plugins/serverless-oauth-scopes еще раз спасибо , брат