LoginSignup
2
0

More than 1 year has passed since last update.

Serverless FrameworkでCognito認証

Last updated at Posted at 2021-07-23

CognitoのSignin情報を利用して、指定エンドポイントに認証を追加する方法です。

設定後の利用方法

  1. CognitoにSigninしてIdTokenを取得する
  2. 取得したIdTokenをheaderに設定してAPIのリクエストをする
    • headerのKeyは、オーソライザー作成時のトークンのソース

これだけで、認証されていない場合のアクセスを防ぐことが可能

やったこと

Api Gatewayでオーソライザー(cognito)の作成

設定画面
image.png

  • Cognitoユーザープール(ユーザー情報の場所)は、作成していると選択可能
  • トークンのソースは、APIに設定するヘッダー名を入れる
  • 作成すると、下記のようにIDができるのでそれをメモ

image.png

※おまけで、試しに認証した後にトークンのソースを変更してみたのですが、即適用されなかったです。再デプロイで適用されたので、ウォームスタート状態だと即適用はされなそうです。

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}" ] ]

まとめ

やったことなかったので試しにやってみたら、あっさりでした。
軽く作る時とかこれで十分ですね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0