Maison > Article > développement back-end > Comment implémenter l'authentification basée sur JSON Web Token à l'aide de Flask-JWT
Comment implémenter l'authentification basée sur JSON Web Token à l'aide de Flask-JWT
Présentation :
Dans les applications Web modernes, la sécurité est cruciale. L’un des aspects clés est l’authentification. JSON Web Token (JWT) est un standard ouvert permettant de transmettre des revendications entre des applications Web. Il peut vérifier l'intégrité des données via des signatures et mettre en œuvre une authentification utilisateur basée sur des jetons.
Dans cet article, nous présenterons comment utiliser l'extension Flask-JWT pour implémenter l'authentification basée sur JSON Web Token afin de protéger notre application Flask.
Installez Flask-JWT :
Tout d'abord, assurez-vous que Flask et Flask-JWT sont installés. Ils peuvent être installés en utilisant :
pip install flask pip install flask-jwt
Comment utiliser :
Flask-JWT fournit des décorateurs pour ajouter facilement une validation de jeton aux fonctions de routage de Flask. Voici un exemple simple :
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()
Dans l'exemple de code ci-dessus, nous avons d'abord importé les modules requis. Ensuite, nous définissons une classe User pour représenter l’entité utilisateur. Ensuite, nous définissons une liste d'utilisateurs (en supposant une base de données) à utiliser pour l'authentification. La fonction
authenticate est utilisée pour authentifier un utilisateur en fonction du nom d'utilisateur et du mot de passe fournis. La fonction d'identité obtient l'objet utilisateur en fonction de l'ID utilisateur dans la charge utile JWT.
Ensuite, nous avons initialisé une application Flask et défini une clé secrète (SECRET_KEY). Nous avons ensuite initialisé un objet jwt à l'aide de la classe JWT et lui avons transmis les fonctions d'authentification et d'identité.
Le décorateur @jwt_required()
est utilisé sur la route /protected
pour protéger la route. Seuls les utilisateurs authentifiés peuvent y accéder. /protected
路由上使用了@jwt_required()
装饰器,用于保护该路由。只有经过身份验证的用户才能访问它。
最后,我们启动了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
Authentifier :
/auth
, en transmettant les données JSON du nom d'utilisateur et du mot de passe. Si l'authentification réussit, nous obtiendrons un access_token. 🎜🎜La route protégée acceptera le jeton et authentifiera l'utilisateur. Voici un exemple de la façon de transmettre un jeton dans un en-tête de requête : 🎜rrreee🎜 Dans l'exemple ci-dessus, nous ajoutons le jeton au champ Autorisation
de l'en-tête de requête et le transmettons à / itinéraire protégé
. Si le jeton est valide, nous obtiendrons une réponse de la route protégée. 🎜🎜Résumé : 🎜Dans cet article, nous avons appris comment utiliser l'extension Flask-JWT pour implémenter l'authentification basée sur JSON Web Token. Nous avons appris comment ajouter un décorateur d'authentification dans une application Flask et démontré comment s'authentifier avec un exemple de code. JSON Web Token fournit un mécanisme d'authentification simple et sécurisé qui peut être appliqué à diverses applications Web. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!