6.2 Flaskで Dynamo D Bを用いたユーザー認証とパスワード暗号化の実装

6.2 FlaskでDynamoDBを用いたユーザー認証とパスワード暗号化の実装 #

ユーザー情報の保管にAWS DynamoDBを使用し、パスワードの暗号化についても考察します。

1. 必要なライブラリのインストール #

まずはじめに、本記事で使用するライブラリをインストールします。今回はFlask, Flask-JWT-Extended, Boto3(AWS SDK for Python),およびbcryptを使用します。

pip install flask flask_jwt_extended boto3 bcrypt

2. bcryptによるパスワードの暗号化 #

次に、ユーザーが入力したパスワードを暗号化するためにbcryptを使用します。bcryptはソルトを自動で生成し、ハッシュ化するための安全な方法を提供します。

import bcrypt

def hash_password(password: str) -> str:
    return bcrypt.hashpw(password.encode(), bcrypt.gensalt())

def check_password_hash(password: str, hashed_password: str) -> bool:
    return bcrypt.checkpw(password.encode(), hashed_password)

3. ユーザー認証とJWTの生成 #

ユーザーの認証を行い、認証が成功した場合はJWTを生成します。この時、ユーザーが入力したパスワードとDynamoDBに保存されているパスワードを比較するために、先ほど作成したcheck_password_hash関数を使用します。

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        user_id = request.form['user_id']
        password = request.form['password']

        # DynamoDBからユーザー情報を取得
        response = table.get_item(Key={'user_id': user_id})
        user = response.get('Item')

        if not user or not check_password_hash(password, user['password']):
            return "Invalid username or password", 401

        # ログイン処理
        access_token = create_access_token(identity=user_id)
        return jsonify(access_token=access_token), 200

    return render_template('login.html')

以上、DynamoDBを用いたユーザー認証とパスワードの暗号化の実装方法について紹介しました。この方法を用いることで、安全性を確保しつつも柔軟な認証処理を実装することが可能となります。