Geoplateforme / sdk-entrepot

SDK Python pour utiliser l'API Entrepôt de la Géoplateforme.
GNU General Public License v3.0
1 stars 0 forks source link

Problème authentification avec double authentification #128

Closed CorentinPeutin closed 4 months ago

CorentinPeutin commented 4 months ago

Bonjour,

J'observe des problèmes pour me connecterà la GPF en utilisant une double authentification. J'ai bien défini un "totp_key" dans le fichier de config. Et, parfois l'authentification fonctionne bien et tout se passe bien mais parfois l'authentification plante à cause d'un "invalid user credentials" : image

Dans mon exemple, aucune modification n'a été faite dans le fichier de config entre les deux lancements de l'étape du workflow et pourtant, une fois l'authentification a planté et une fois elle a planté.

vsasyan-ignf commented 4 months ago

Bonjour,

Le clef TOPT permet de générer un code valable 30s (pe : de 00:00:00 à 00:00:30).

Le code TOTP n'étant valables que 30s il est possible qu'il y ait un léger décalage d'heure entre le client et le serveur et que ce ne soit pas le même intervalle de 30s qui soit prises en compte.

Est-ce que c'est possible de noter environ les secondes au moment ou ça échoue ? On pourra voir si c'est à des moment identiques ou pas.

Si c'est ça le problème, le fait qu'il y ait 5 tentatives ne sert à rien car le code TOPT n'est pas régénéré (on refait la même requête), donc il restera invalide. On pourrait voir pour améliorer cela.

Sinon ça serait plus côté GPF et Worldline qu'il faudrait voir ça, je pense pas que ça vienne du SDK en soit.

Dolite commented 4 months ago

J'ai aussi ce souci là. Il faudrait voir si la date de référence est configurable d'un côté ou de l'autre, et la même.

CorentinPeutin commented 4 months ago

Je viens de faire plusieurs tests et il arrive que la requête fonctionne avec les retry. Ca semble assez aléatoire : image image image image image image

vsasyan-ignf commented 4 months ago

Ok, merci pour les précisions.

Par rapport au point que je soulevais, je m'attendez a que ça plante en début (00-05) ou en fin (25-30) d'intervalle de 30 seconde, mais pas à 10 ou 42 secondes par exemple...

Effectivement il faudrait en savoir plus sur la date de référence des deux côtés. Est-ce que vous pouvez voir côté Wordline ?

En tous cas, on va voir pour mettre à jour le code TOTP à chaque nouvelle tentative afin qu'elles soient vraiment utiles.

vsasyan-ignf commented 4 months ago

J'ai relu le code : le code TOTP est déjà régénéré à chaque renvoi de la requête d'authentification. Donc ça c'est une bonne nouvelle.

En regardant de plus près, il semblerait que les codes (valable 30s) ne puissent en plus être utilisés qu'une seule fois.

Donc il est possible qu'en cas de lancements rapprochés en mode cli on ait plusieurs récupérations d'un token en moins de 30s et donc plusieurs utilisations d'un même code.

Pour contourner le problème :

[store_authentification]
# ... autres paramètres...
nb_attempts=8
sec_between_attempt=5

Exemple d'utilisations multi en mode cli :

image

Le première utilisation du code est ok, mais pour la seconde il faut attendre la fin des 30s pour en avoir un nouveau.

vsasyan-ignf commented 4 months ago

J'ai ajouté le log du code TOTP et l'heure (comme sur le screen) mais en niveau debug.

CorentinPeutin commented 4 months ago

La solution de contournement fonctionne très bien. Merci

vsasyan-ignf commented 4 months ago

Du coup je ferme le ticket, on pourrait faire un système de session si utilisation en cli si cela devient nécessaire, mais pour le moment il faut mieux attendre 30s ou utiliser le SDK.