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

PHPz
PHPzoriginal
2023-08-02 16:43:511199parcourir

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

Enfin, nous lançons l'application Flask.


Authentifier :

Pour nous authentifier, nous devons faire une requête HTTP POST à ​​l'application, en transmettant le nom d'utilisateur et le mot de passe. Flask-JWT générera un jeton JWT pour nous. 🎜🎜Voici un exemple de code pour s'authentifier : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons envoyé une requête HTTP POST à ​​la route /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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn