Целью является создание единого проекта web api с ядром dotnet, который может поддерживать аутентификацию на основе AWS Cognito для большинства своих конечных точек и не аутентифицировать для одной конечной точки. Ниже приведен файл template.yaml.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: An AWS Serverless Application that uses the ASP.NET Core framework running
in Amazon Lambda.
Parameters:
ShouldCreateBucket:
Type: String
AllowedValues:
- 'true'
- 'false'
Description: If true then the S3 bucket that will be proxied will be created with
the CloudFormation stack.
BucketName:
Type: String
Description: Name of S3 bucket that will be proxied. If left blank a name will
be generated.
MinLength: '0'
CognitoUserPoolName:
Type: String
Default: XXXXX-UserPool
CognitoUserPoolClientName:
Type: String
Default: XXXXX-UserPool
Conditions:
CreateS3Bucket:
Fn::Equals:
- Ref: ShouldCreateBucket
- 'true'
BucketNameGenerated:
Fn::Equals:
- Ref: BucketName
- ''
Resources:
MyCognitoAuth:
Type: AWS::ApiGateway::Authorizer
Properties:
AuthorizerUri: arn:aws:cognito-idp:ap-south-1:XXXXXXXXX:userpool/ap-south-1_xxxxxxxx
IdentitySource: method.request.header.Authorization
MyServiceApi:
Type: AWS::Serverless::Api
Properties:
Name: MyServiceApi
StageName: !Ref Version
Auth:
Authorizer: MyCognitoAuth
AspNetCoreFunction:
Type: AWS::Serverless::Function
Properties:
Handler: AWSServerless1::AWSServerless1.LambdaEntryPoint::FunctionHandlerAsync
Runtime: dotnetcore2.1
CodeUri: Ref BucketName
MemorySize: 256
Timeout: 30
Role: null
Policies:
- AWSLambdaFullAccess
Environment:
Variables:
AppS3Bucket:
Fn::If:
- CreateS3Bucket
- Ref: Bucket
- Ref: BucketName
Events:
CognitoAuthApi:
Type: Api
Properties:
RestApiId: !Ref MyServiceApi
Path: /{proxy+}
Method: ANY
Auth:
Authorizer: MyCognitoAuth
APIKeyAuthApi:
Type: Api
Properties:
RestApiId: !Ref MyServiceApi
Path: /api/users/canLogin
Method: GET
Auth:
Authorizer: null
Bucket:
Type: AWS::S3::Bucket
Condition: CreateS3Bucket
Properties:
BucketName:
Fn::If:
- BucketNameGenerated
- Ref: AWS::NoValue
- Ref: BucketName
Outputs:
ApiURL:
Description: API endpoint URL for Prod environment
Value:
Fn::Sub: https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/
S3ProxyBucket:
Value:
Fn::If:
- CreateS3Bucket
- Ref: Bucket
- Ref: BucketName
Но выдается следующая ошибка:
Ошибка: [InvalidResourceException ('AspNetCoreFunction', 'Событие с идентификатором [CognitoAuthApi] недопустимо.
Невозможно установить Authorizer [MyCognitoAuth] для метода API [any] для пути [/ {proxy +}], поскольку связанный API не определяет авторизаторов. '), InvalidResourceException (' MyServiceApi ', "Invalid valueдля свойства 'Auth' ')] (AspNetCoreFunction,' Событие с идентификатором [CognitoAuthApi] недопустимо.
Невозможно установить Authorizer [MyCognitoAuth] для метода API [any] для пути[/ {proxy +}], потому что связанный API не определяет авторизаторов. ') (' MyServiceApi ', "Недопустимое значение для свойства' Auth '")
Как правильно это сделать