CognitoのAccessTokenを取得


背景

Cognitoでは、AccessToken、IDToken、RefreshTokenを取得できる。ここでサーバ側でAccessTokenの中身を使用してセッション管理に利用することができないか?

実装

Cognito User Poolでユーザを作成する。

作成画面については別途サーバで構築した管理画面で実施
(APIGateway+Lambdaと S3に設置したViewでもOK:サーバレスで作成すると恐らく月額数円)

UserPoolでランクの属性を追加

認証が行われると3つのトークンが払い出される。今回はIDトークンを使用してセッション管理を行う。

トークン名 内容
IDトークン name,emailなど認証されたユーザ情報が入る
アクセストークン 認証されたリソースへのアクセスを付与
更新トークン 新しい ID またはアクセストークンの取得に必要な情報が含まれる

IDトークンはJWTなので下記のようなトークンをクライアント側に返すので必要な要素をセッションやCookieに格納するなどの処理を行う。ここでカスタム属性を設定した場合は、下記の情報にカス

タム属性が付与される。
ちなみにJWTはbase64-encodedされたJSONこのあたりは次の「検証方法」に詳細な記載がある。

{
  "sub": "aaaaaaaa-bbbb-cccc-dddd-example",
  "aud": "xxxxxxxxxxxxexample",
  "email_verified": true,
  "token_use": "id",
  "auth_time": 1500009400,
  "iss": "https://cognito-idp.ap-southeast-2.amazonaws.com/ap-southeast-2_example",
  "cognito:username": "anaya",
  "exp": 1500013000,
  "given_name": "Anaya",
  "iat": 1500009400,
  "email": "[email protected]"
}

検証方法