5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

いつも忘れる Flask-Cognito

Last updated at Posted at 2020-07-09

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のサンプルをどうぞ。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?