Serverless FrameworkでCognito認証
2212 ワード
CognitoのSignin情報を利用して、指定エンドポイントに認証を追加する方法です。
設定後の利用方法
- CognitoにSigninしてIdTokenを取得する
- 取得したIdTokenをheaderに設定してAPIのリクエストをする
- headerのKeyは、オーソライザー作成時のトークンのソース
- headerのKeyは、オーソライザー作成時のトークンのソース
これだけで、認証されていない場合のアクセスを防ぐことが可能
やったこと
Api Gatewayでオーソライザー(cognito)の作成
- Cognitoユーザープール(ユーザー情報の場所)は、作成していると選択可能
- トークンのソースは、APIに設定するヘッダー名を入れる
- 作成すると、下記のようにIDができるのでそれをメモ
※おまけで、試しに認証した後にトークンのソースを変更してみたのですが、即適用されなかったです。再デプロイで適用されたので、ウォームスタート状態だと即適用はされなそうです。
serverless.yamlにauthoraizerの設定を追加
- 要認証のエンドポイントに下記の感じで設定を入れる
- http:
cors: true
path: "{proxy+}"
method: any
authorizer:
type: COGNITO_USER_POOLS
authorizerId: "pk2q0p"
- authorizerIdはオーソライザー作成で作られたIDを設定する
追記
公式見てて、下記の定義することで、オーソライザーを手動作成せず自動でいけました。
※env.USER_POOL_ID は、cognitoユーザープールを手動作成してできたものを設定
authorizer:
name: Myauthorizer
type: COGNITO_USER_POOLS
arn:
!Join [ ":", [ "arn:aws:cognito-idp", Ref: AWS::Region, Ref: AWS::AccountId, "userpool/${env:USER_POOL_ID}" ] ]
まとめ
やったことなかったので試しにやってみたら、あっさりでした。
軽く作る時とかこれで十分ですね。
Author And Source
この問題について(Serverless FrameworkでCognito認証), 我々は、より多くの情報をここで見つけました https://qiita.com/aioa/items/bd44bfd2359a2980d2ac著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .