Я хочу поделиться авторизатором между различными сервисами HTTP API с помощью Serverless. Я видел разные ссылки, которые объясняют разделение разных конечных точек / сервисов на отдельных держателей с их собственными файлами serverless.yml, но я не могу найти информацию о том, как разделить авторизатор между ними.
Я использую базовый c пример HTTP API (не для настройки REST API), например:
org: orgexample
app: app-example
service: notes-api
plugins:
- serverless-bundle
provider:
name: aws
runtime: nodejs12.x
region: eu-west-2
environment:
DOMAIN_SUFFIX: notes-api
httpApi:
authorizers:
serviceAuthorizer:
identitySource: $request.header.Authorization
issuerUrl:
Fn::Join:
- ""
- - "https://cognito-idp."
- "${opt:region, self:provider.region}"
- ".amazonaws.com/"
- Ref: serviceUserPool
audience:
- Ref: serviceUserPoolClient
functions:
getProfileInfo:
handler: main.get
events:
- httpApi:
method: GET
path: /user/profile
authorizer: serviceAuthorizer
createProfileInfo:
handler: main.post
events:
- httpApi:
method: POST
path: /user/profile
authorizer: serviceAuthorizer
resources:
Resources:
HttpApi:
DependsOn: serviceUserPool
serviceUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:service}-user-pool-${opt:stage, self:provider.stage}
UsernameAttributes:
- email
AutoVerifiedAttributes:
- email
serviceUserPoolClient:
Type: AWS::Cognito::UserPoolClient
Properties:
ClientName: ${self:service}-user-pool-client-${opt:stage, self:provider.stage}
AllowedOAuthFlows:
- implicit
AllowedOAuthFlowsUserPoolClient: true
AllowedOAuthScopes:
- phone
- email
- openid
- profile
- aws.cognito.signin.user.admin
UserPoolId:
Ref: serviceUserPool
CallbackURLs:
- https://localhost:3000
ExplicitAuthFlows:
- ALLOW_USER_SRP_AUTH
- ALLOW_REFRESH_TOKEN_AUTH
GenerateSecret: false
SupportedIdentityProviders:
- COGNITO
serviceUserPoolDomain:
Type: AWS::Cognito::UserPoolDomain
Properties:
UserPoolId:
Ref: serviceUserPool
Domain: ${self:service}-user-pool-domain-${opt:stage, self:provider.stage}-${self:provider.environment.DOMAIN_SUFFIX}
Это создаст HTTP API, API-шлюз и обернет его в Cognito Authorizer. Я хотел бы настроить второй сервис, который использует тот же авторизатор.
Я видел похожие вопросы, но ни один из них не касался HTTP API и общего доступа к Cognito Authorizer. Полезные ссылки:
https://seed.run/blog/how-to-structure-a-real-world-monorepo-serverless-app.html.
https://github.com/seed-run/serverless-template-monorepo.