cognitoでサインアップすると返却されるjwtはbase64になっており、decodeするとユーザ情報を取得できます。今回サンプルコードとともにdecodeすると取得できる情報について確認していきます。
サンプルソース
Cognitoに認証してresponseからjwtを取り出してpython-joseでdecodeしています。結果を確認するためにprintでコンソール出力しています。
Lambdaで使用する場合、python-joseは標準ライブラリに入っていないのでデプロイソースに含めるかLambdaレイヤー化を検討してください。
import boto3
from jose import jwt # pip3 python-joseでインストール
client = boto3.client('cognito-idp')
response = client.admin_initiate_auth(
UserPoolId="ap-northeast-1_XXXXXXX",
ClientId="xxxxxxxxxxxxxxxxxxxxxxx",
AuthFlow="ADMIN_NO_SRP_AUTH",
AuthParameters={
'USERNAME': "testuser01",
'PASSWORD': "Password_123"
}
)
# boto3レスポンスからcognito idtoken取り出し
idToken = response['AuthenticationResult']['IdToken']
# python-joseでidtokenをdecode
decoded_payload = jwt.get_unverified_claims(idToken)
# 結果をコンソールに表示
print(decoded_payload)
jwtから取り出せる要素
実行結果は以下のようになります。AWS公式ドキュメントの通りデコードできました。
自分で独自に設定したuser-attributesのnicknameについてもデコードしたjwtに含まれていました。
{"sub": "a5cb8186-00ed-4fca-8d5c-8312d1a50b9d",
"email_verified": True,
"iss": "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_XXXXXXX",
"phone_number_verified": True,
"cognito:username": "testuser01",
"origin_jti": "8069e251-3f43-41d8-9e47-9ae9d7cad089",
"aud": "5vu97rkrnnp9c5mh975ruat5l1",
"event_id": "58a12bab-e35d-4909-afe4-ed83dc1215ab",
"token_use": "id",
"auth_time": 1671965420,
"nickname": "田中太郎",
"phone_number": "+819012345678",
"exp": 1671969020,
"iat": 1671965420,
"jti": "836e4c1e-f352-4e23-a2b6-ff6899c30e1c",
"email": "testuser01@mail.com"}
注意点 jwtのdecodeはurlsafeで!
base64には通常のものとurlsafeのものがあります。サンプルソースで使用しているpython-joseはurlsafeです。
ざっくり違いを申し上げるとエンコードに使用している文字が少し異なります。以下の記事で詳しく解説しているのでぜひご覧ください。
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当