Python : générer un JSON Web Token pour ensuite s’authentifier sur un serveur web
Le JSON Web Token (JWT) est un format de token utilisé pour l’authentification dans les applications web. Il permet de stocker des informations sous forme de JSON de manière sécurisée et compacte. Dans cet article, nous parlerons de la génération d’un JWT en utilisant Python et de son utilisation pour s’authentifier sur un serveur web.
Python propose plusieurs bibliothèques pour générer et décoder les JWT, mais nous utiliserons ici la bibliothèque PyJWT qui est largement utilisée et maintenue.
Génération d’un JWT
Pour générer un JWT en Python, nous avons besoin d’importer le module PyJWT. Nous devons également avoir une clé secrète qui sera utilisée pour signer le JWT.
Voici un exemple de code pour générer un JWT :
import jwt
payload = {'user_id': 1234, 'username': 'john_doe'}
secret_key = 'secret'
jwt_token = jwt.encode(payload, secret_key, algorithm='HS256')
print(jwt_token)
Dans cet exemple, nous avons un payload qui contient les informations que nous souhaitons stocker dans le JWT. Nous utilisons ensuite la fonction encode() du module PyJWT en spécifiant l’algorithme de chiffrement (ici HS256) et la clé secrète pour générer le JWT.
Authentification sur un serveur web
Une fois que nous avons généré un JWT, nous pouvons l’utiliser pour s’authentifier sur un serveur web. Pour cela, nous devons ajouter le JWT dans les en-têtes de nos requêtes HTTP.
Voici un exemple de code pour ajouter le JWT dans les en-têtes :
import requests
jwt_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjM0LCJ1c2VybmFtZSI6ImpvaG5fZG9lIn0.qiDwYQbKLoCdt5s--POv-38kJ4_NZZqSudn7a8SFn0M'
headers = {'Authorization': 'Bearer ' + jwt_token}
response = requests.get('https://example.com/api/user', headers=headers)
print(response.json())
Dans cet exemple, nous utilisons la bibliothèque Requests pour effectuer une requête GET vers l’URL https://example.com/api/user. Nous ajoutons le JWT dans les en-têtes en utilisant la clé « Authorization » avec la valeur « Bearer » suivie du JWT.
Vérification et décryptage du JWT
Avant d’utiliser le JWT pour s’authentifier, il est important de le vérifier et de le décrypter pour s’assurer de son intégrité.
Voici un exemple de code pour vérifier et décrypter un JWT :
import jwt
jwt_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjM0LCJ1c2VybmFtZSI6ImpvaG5fZG9lIn0.qiDwYQbKLoCdt5s--POv-38kJ4_NZZqSudn7a8SFn0M'
secret_key = 'secret'
try:
decoded_token = jwt.decode(jwt_token, secret_key, algorithms=['HS256'])
print(decoded_token)
except jwt.ExpiredSignatureError:
print('JWT expired')
except jwt.InvalidTokenError:
print('Invalid JWT')
Dans cet exemple, nous utilisons la fonction decode() du module PyJWT pour décoder le JWT en spécifiant la clé secrète et l’algorithme de chiffrement utilisés lors de la génération du JWT. Si le JWT est valide, nous obtenons un dictionnaire contenant les informations du payload.
Le JSON Web Token est un outil puissant pour l’authentification dans les applications web. En utilisant Python et la bibliothèque PyJWT, nous pouvons facilement générer des JWT et les utiliser pour s’authentifier sur un serveur web. Il est cependant important de prendre en compte la sécurité du stockage et du transfert des JWT, ainsi que de vérifier et décrypter le JWT avant de l’utiliser.
J’espère que cet article vous a donné une bonne introduction à l’utilisation des JWT en Python. N’hésitez pas à explorer davantage la bibliothèque PyJWT pour découvrir ses nombreuses fonctionnalités.

