3

PythonのPyJWTライブラリで、AWS CongnitoのJWT(IDトークン)を検証する関数を作った話

5 min read

PyJWTで、AWS CongnitoのJWTを検証する。

こちらの記事を参考にさせていただきました。

PythonでAWS CognitoのJWTのバリデーション + Flaskへの組み込み

WebアプリケーションのバックエンドでDjangoやFlaskに組み込んで使うことを考えているのでひとまずはトークンを引数に、有効なものであるかどうか(True or False)を返す関数を作成しました。




JWTとは?

RFC 7519に定められている。

認証に使う文字列で、簡単に言うと「信頼する機関からの印鑑付き名刺」 ここで信頼する機関とはAWS CognitoやAuth0、Firebase Authenticationなどのサービス

例えばこんな文字列 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

ピリオド(.)で、ヘッダー.ペイロード.署名の3つの部分に分かれている。

これらはBase64 Url decodeすることで中身を確認できる

これはjwt.ioを参照




{'alg': 'HS256', 'typ': 'JWT'} {'sub': '1234567890', 'name': 'John Doe', 'iat': 1516239022}

「OAuth & OIDC 入門編 by #authlete」がとてもわかりやすかったです。

https://www.youtube.com/watch?v=PKPj_MmLq5E%E3%80%80

これをCognitoからのJWTトークンでやってみる。

AWS公式、JSON Web トークンの検証

tokenやpoolIDなどは各々のもので試してみてください!




トークンの検証失敗:原因→ Signature has expired

False

Discussion

コメントにはログインが必要です。