参考サイト
Auth0を使ってPython/Flaskで手軽に多機能なログイン/ログアウトを実現する
https://blanktar.jp/blog/2017/11/python-flask-auth0.html
上記サイトに一部、動かない部分があったので修正した。
修正箇所
from jwt.algorithms import RSAAlgorithm
@app.route('/callback')
def auth_callback():
# Auth0がくれた情報を取得する。
resp = auth0.authorized_response()
if resp is None:
return 'nothing data', 403
# 署名をチェックするための情報を取得してくる。
jwks = json.loads(urllib.request.urlopen("https://"+AUTH0_DOMAIN+"/.well-known/jwks.json").read())
# JWT形式のデータを復号して、ユーザーについての情報を得る。
# ついでに、署名が正しいかどうか検証している。
try:
payload = jwt.decode(resp['id_token'], RSAAlgorithm.from_jwk( json.dumps(jwks['keys'][0])), audience=AUTH0_CLIENT_ID, algorithms='RS256')
except Exception as e:
print(e)
return 'something wrong', 403 # 署名がおかしい。
# flaskのSessionを使ってcookieにユーザーデータを保存。
flask.session['profile'] = {
'id': payload['sub'],
'name': payload['name'],
'picture': payload['picture'],
}
# マイページに飛ばす。
return flask.redirect(flask.url_for('mypage'))