Créer un Token d'authentification en Python
Les tokens d'authentification sont généralement utilisés pour authentifier un client à une API, afin d'accéder à des ressources protégées. Nous allons voir comment générer ce token unique en langage Python.
Prérequis
Nous allons utiliser le JWT
pour Json Web Token
. Il permet l'échange sécurisé de jetons (tokens) entre plusieurs parties. Cette sécurité de l'échange se traduit par la vérification de l'intégrité et de l'authenticité des données et s'effectue par l'algorithme HMAC ou RSA.
Installons le module Python pyjwt
pip install pyjwt
La clé secrète
L'étape suivante est de générer la clé secrète qui est utilisée pour signer le token, ce qui permet de vérifier son authenticité plus tard. Pour créer une clé secrète :
import secrets
secret_key = secrets.token_urlsafe(32)
La variable secret_key
stocke maintenant une clé secrète aléatoire d'une taille de 32 octets.
Le Payload
Le payload est un ensemble de données à inclure dans le contenu du token. A vous de remplacer la valeur de la clé username
par la variable déjà présente dans votre code.
Pour créer le payload, nous allons créer le dictionnaire Python suivant :
import datetime
payload = {
'username': 'test',
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1)
}
Nous avons utilisé le module datetime
afin que la clé exp
stocke la date d'expiration du token (ici définie à 1 jour).
Le token
A l'aide de la la méthode encode
du module JWT
, nous allons passer le contenu du token, la clé secrète générée plus haut ainsi que l'algorithme de hachage (ici HMAC-SHA256) à utiliser pour créer le token.
import jwt
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(token)
Le résultat (stocké dans la variable token
) est un token d'authentification sous forme de chaîne de caractères.
Voici le code au complet :
import secrets
import jwt
import datetime
# Définir la clé secrète
secret_key = secrets.token_urlsafe(32)
# Définir le contenu du token
payload = {
'username': 'test',
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1)
}
# Création du token
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(token)
Vous pouvez maintenant intégrer ce bout de code dans vos API, par exemple crées à l'aide du framework Python Flask
ou autre 😉