Есть ли способ иметь конечную точку шлюза API, чтобы иметь Cognito Authorizer и в то же время разрешать неаутентифицированным пользователям.
Конечная точка будет доступна любому, но если пользователь аутентифицирован, я возьму его id
и некоторые другие вещи.
На данный момент мой шаблон Cloudformation выглядит примерно так. У меня уже есть настройка Cognito.
Resources:
webApi:
Type: AWS::Serverless::Api
Properties:
Auth:
DefaultAuthorizer: CognitoAuthorizer
Authorizers:
CognitoAuthorizer:
UserPoolArn: !Ref UserPoolArn
AddDefaultAuthorizerToCorsPreflight: false
Cors:
AllowMethods: "'*'"
AllowHeaders: "'*'"
AllowOrigin: "'*'"
StageName: !Ref Environment
DefinitionBody:
swagger: "2.0"
info:
title:
Ref: AWS::StackName
paths:
/authendpoint:
post:
security:
- NONE: []
responses: {}
x-amazon-apigateway-integration:
...
httpMethod: "POST"
type: "aws_proxy"
/endpoint
get:
security:
- NONE: []
responses: {}
x-amazon-apigateway-integration:
...
httpMethod: "POST"
type: "aws_proxy"
#FUNCTIONS ==========================================
...
Я думал о создании собственного авторизатора, но мне было интересно, есть ли способ заставить его работать без добавления пользовательского кода
Спасибо
РЕДАКТИРОВАТЬ: чтобы уточнить, все, что мне нужно, это конечная точка, которая с помощью токена извлечет информацию о пользователе и присоединит ее к объекту запроса лямбда-выражения, в случае go это будет что-то вроде cognitoClaims := request.RequestContext.Authorizer["claims"]
. Если токен не передан в заголовок, API-шлюз все равно разрешит гостевым пользователям.