Django-fr

Forum

#1 11-12-2011 10:56:29

pumpkin
Membre
Inscription : 11-12-2011
Messages : 2

Authentification par token

Hello !

J'aimerais identifier un utilisateur à partir d'un token fourni par une requête HTTP.

- Dans la requête HTTP, ma view reçoit les 3 arguments suivants : utilisateur, timestamp, token.
- Le token est généré via une formule du style : md5( md5(password) + timestamp).
- Mon but est de générer un nouveau token pour permettre la vérification avec celui fourni en argument de la requête.

Je ne comprends pas comment je peux générer ce token avec django. N'étant pas familier avec ces notions, je ne vois pas comment faire en lisant la documentation :
Comment demander à django, quelle fonction utiliser, pour générer un token avec ma formule ci-dessus ?

Le timestamp fourni par la requête est différent à chaque requête.

Merci !

Hors ligne

#2 11-12-2011 22:15:33

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : Authentification par token

ce que tu ne dis pas : est-ce que tu utilise django.contrib.auth pour tes users ?
sinon , réponse générale, django c'est du python donc tu peux tout à fait écrire  :

    if(hashlib.md5(hashlib.md5(password)+timestamp).hexdigest() == token):
        ....

j'espere juste que ton timestamp ne prend pas les secondes , sinon comment faire pour faire une bonne comparaison en tenant compte de la latence du réseau ?

Hors ligne

#3 11-12-2011 22:45:10

pumpkin
Membre
Inscription : 11-12-2011
Messages : 2

Re : Authentification par token

> est-ce que tu utilise django.contrib.auth pour tes users ?

Oui, je compte l'utiliser.
C'est dans cette documentation-là que j'ai cherché une solution pour générer mon token dans la view.

> django c'est du python donc tu peux tout à fait écrire  :
> if(hashlib.md5(hashlib.md5(password)+timestamp).hexdigest() == token):

Comme j'obtiens le password ?
Il me semble qu'aucune *fonction django* ne me permet de le manipuler.

> j'espere juste que ton timestamp ne prend pas les secondes , sinon comment faire pour faire une bonne comparaison en tenant compte de la latence du réseau ?

Le timestamp n'est pas regénéré dans la view. Je dois utiliser celui fourni en argument. Il sert de SALT pour générer le token.

En fait, ma question est de savoir si une solution de ce style est possible :
timestamp = request.GET[...]
token = request.GET[...]
[..]
algo_format = 'md5$SALT$md5_password'
my_token = my_user.generate_token_from_algo(salt=timestamp, format=algo_format) # génère le token grâce au md5 du mot de passe en db
[..]
if token == my_token:
   ... authentification user ok
else:
   ... authentification user ko

De plus, je remarque que dans l'interface /admin > Auth › Utilisateurs › monUser : Dans le champ 'mot de passe', il y a quelque chose qui ressemble à la formule pour générer le token : [algo]$[salt]$[hexdigest]

Hors ligne

Pied de page des forums