Flask-JWT を使用して JSON Web トークン ベースの認証を実装する方法
概要:
最新の Web アプリケーションでは、セキュリティが非常に重要です。重要な側面の 1 つは認証です。 JSON Web Token (JWT) は、Web アプリケーション間でクレームを渡すためのオープン スタンダードです。署名を通じてデータの整合性を検証し、トークンベースのユーザー認証を実装できます。
この記事では、Flask-JWT 拡張機能を使用して JSON Web トークンベースの認証を実装し、Flask アプリケーションを保護する方法を紹介します。
Flask-JWT のインストール:
まず、Flask と Flask-JWT がインストールされていることを確認します。次のコマンドを使用してインストールできます:
pip install flask pip install flask-jwt
使用方法:
Flask-JWT は、Flask ルーティング関数にトークン検証を簡単に追加するデコレーターを提供します。簡単な例を次に示します。
from flask import Flask from flask_jwt import JWT, jwt_required, current_identity from werkzeug.security import safe_str_cmp app = Flask(__name__) app.config['SECRET_KEY'] = 'super-secret-key' class User: def __init__(self, id, username, password): self.id = id self.username = username self.password = password def __str__(self): return f'User(id={self.id}, username={self.username})' users = [ User(1, 'admin', 'adminpassword'), ] def authenticate(username, password): user = next((user for user in users if user.username == username), None) if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')): return user def identity(payload): user_id = payload['identity'] return next((user for user in users if user.id == user_id), None) jwt = JWT(app, authenticate, identity) @app.route('/protected') @jwt_required() def protected(): return f'Hello, {current_identity}! This route is protected.' if __name__ == '__main__': app.run()
上記のコード例では、最初に必要なモジュールをインポートしました。次に、ユーザー エンティティを表す User クラスを定義します。次に、認証に使用するユーザーのリスト (データベースを想定) を定義します。
authenticate 関数は、指定されたユーザー名とパスワードに基づいてユーザーを認証するために使用されます。 ID 関数は、JWT ペイロード内のユーザー ID に基づいてユーザー オブジェクトを取得します。
次に、Flask アプリケーションを初期化し、秘密鍵 (SECRET_KEY) を設定しました。次に、JWT クラスを使用して jwt オブジェクトを初期化し、それに認証関数とアイデンティティ関数を渡しました。
@jwt_required()
デコレータは、ルートを保護するために /protected
ルートで使用されます。認証されたユーザーのみがアクセスできます。
最後に、Flask アプリケーションを起動します。
認証:
認証するには、アプリケーションに HTTP POST リクエストを作成し、ユーザー名とパスワードを渡す必要があります。 Flask-JWT は JWT トークンを生成します。
認証方法のサンプル コードは次のとおりです:
import requests def authenticate(username, password): response = requests.post('http://localhost:5000/auth', json={'username': username, 'password': password}) if response.status_code == 200: return response.json()['access_token'] access_token = authenticate('admin', 'adminpassword') print(f'Access Token: {access_token}')
上記の例では、HTTP POST リクエストを /auth
ルートに送信し、ユーザーの JSON を渡しました。名前とパスワードのデータ。認証が成功すると、access_token が取得されます。
保護されたルートはトークンを受け入れ、ユーザーを認証します。リクエスト ヘッダーでトークンを渡す方法の例を次に示します。
import requests headers = { 'Authorization': f'Bearer {access_token}' } response = requests.get('http://localhost:5000/protected', headers=headers) print(response.text)
上の例では、トークンをリクエスト ヘッダーの Authorization
フィールドに追加して # に渡します。 ##/protectedルーティング。トークンが有効な場合、保護されたルートから応答を受け取ります。
この記事では、Flask-JWT 拡張機能を使用して JSON Web トークンベースの認証を実装する方法を学びました。 Flask アプリケーションに認証デコレータを追加する方法を学習し、サンプル コードを使用して認証する方法を示しました。 JSON Web トークンは、さまざまな Web アプリケーションに適用できるシンプルで安全な認証メカニズムを提供します。
以上がFlask-JWTを使用してJSON Webトークンベースの認証を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。