Créer un Token d'authentification en Python

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 😉