Aws cognito userpoolを使用してAPIエンドポイントを承認する必要があります。手動で行うことはできますが、サーバーレスフレームワークを使用して認証部分を自動化する必要があります。
サーバーレスフレームワークはaws cognitoをサポートしていますか?
もしそうなら、サーバーレスでaws-userpoolをどのようにセットアップしますか?
はい 。 Cognitoユーザープール承認者に対するサーバーレス(v1.5)サポート。
サーバーレスの以前のバージョンを使用している場合は、v1.5以降を更新する必要があります。
APIエンドポイントのユーザープール認証では、プールarnを指定する必要があります。
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
integration: lambda
authorizer:
name: authorizer
arn: arn:aws:cognito-idp:us-east-1:123456789:userpool/us-east-1_XXXXXX
詳細は this の記事をご覧ください。
リソースで宣言した承認者をCognitoユーザープールに設定する場合は、CloudFormationを使用して承認者も作成する必要があります。
functions:
functionName:
# ...
events:
- http:
# ...
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
resources:
Resources:
ApiGatewayAuthorizer:
Type: AWS::ApiGateway::Authorizer
Properties:
Name: CognitoUserPool
Type: COGNITO_USER_POOLS
IdentitySource: method.request.header.Authorization
RestApiId:
Ref: ApiGatewayRestApi
ProviderARNs:
- Fn::GetAtt:
- UserPool
- Arn
UserPool:
Type: AWS::Cognito::UserPool
サーバーレス1.35.1
誰かがこれを偶然見つけた場合に備えて。これが私の実用的な解決策です。
ユーザープールをどこに作成しても、先に進んでApiGatewayAuthorizer
を追加できます。
# create a user pool as normal
CognitoUserPoolClient:
Type: AWS::Cognito::UserPoolClient
Properties:
# Generate an app client name based on the stage
ClientName: ${self:custom.stage}-user-pool-client
UserPoolId:
Ref: CognitoUserPool
ExplicitAuthFlows:
- ADMIN_NO_SRP_AUTH
GenerateSecret: true
# then add an authorizer you can reference later
ApiGatewayAuthorizer:
DependsOn:
# this is pre-defined by serverless
- ApiGatewayRestApi
Type: AWS::ApiGateway::Authorizer
Properties:
Name: cognito_auth
# apparently ApiGatewayRestApi is a global string
RestApiId: { "Ref" : "ApiGatewayRestApi" }
IdentitySource: method.request.header.Authorization
Type: COGNITO_USER_POOLS
ProviderARNs:
- Fn::GetAtt: [CognitoUserPool, Arn]
次に、関数を定義するとき
graphql:
handler: src/app.graphqlHandler
events:
- http:
path: /
method: post
cors: true
integration: lambda
# add this and just reference the authorizer
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer