CognitoのJWTで認証をしてAPIを実行する方法
githubの説明がわかりにくい...
cognitojwtモジュールのコードまで見に行かないといけなかった...
先駆者がいるありがた味がわかる。
flask-cognitoのインストール
pip install flask-cognito
JWKSの取得(サーバーがAWSにアクセスできない環境への対応用)
アクセスできるならなくてもよい。
あるとトラフィックが抑えられるかも。知らんけど。
https://cognito-idp.{リージョン}.amazonaws.com/{ユーザープールID}/.well-known/jwks.json
flaskに各種設定
from flask_cognito import CognitoAuth, cognito_auth_required
app = Flask(__name__)
app.config['COGNITO_REGION'] = 'リージョン'
app.config['COGNITO_USERPOOL_ID'] = 'ユーザープールID'
app.config['COGNITO_APP_CLIENT_ID'] = 'クライアントID'
app.config['COGNITO_CHECK_TOKEN_EXPIRATION'] = True #"True"の場合、トークンの有効期限を無視する
app.config['COGNITO_JWT_HEADER_NAME'] = 'Authorization' # CognitoからのトークンならこのままでOK
app.config['COGNITO_JWT_HEADER_PREFIX'] = 'Bearer' # CognitoからのトークンならこのままでOK
# ここはflask-cognitoのための処理ではなく、congnitojwtモジュールのための処理
# サーバーがインターネットに接続できない環境の場合、JWKSを配置することで認証が可能
# パスはサンプル。お好きなところにどうぞ。
# ちゃんと設定されたかの確認もお好みでどうぞ。
os.environ.setdefault('AWS_COGNITO_JWSK_PATH', 'cognito/jwks.json')
cogauth = CognitoAuth(app)
@app.route('/', methods=['GET'])
@cognito_auth_required # 認証をかけたいエンドポイントに追加するだけ
def page_index():
return render_template('index.html')
どうせまた忘れる
ユーザーグループの対応
対して難しくないので、こちらはgithubのサンプルをどうぞ。