Je développe un système fiable pour la génération et la validation de jeton utilisés principalement pour des liens dans des courriels de confirmation (réinitialiser la demande de mot de passe, modifier le flux de messagerie, activer un compte, etc.).
Il y a quelques points obligatoires:
Les jetons doivent être uniques (même lorsque les deux génèrent en même temps) dans le système (dans la base de données)
Jeton doit être une utilisation unique
De cela, j'ai décidé de générer un jeton comme celui-ci:
token = sha256(user.id + time + uuid(v4) + secret)
Ce jeton n'a pas besoin de porter des informations d'expiration, car il est enregistré dans la base de données avec ces colonnes à l'extérieur.
Je le demande, car je sais qu'il y a des exploits connus de ces types de jetons d'utilisation ponctuelle envoyés à un courrier électronique et je ne suis pas sûr que je serai en sécurité.
Je compterais ça est sûr. Depuis que vous utilisez l'heure utilisateur, UUID et un secret.
Si quelqu'un créait ses propres jetons, le temps seul en fait un facteur difficile et avec les autres secrets ajoutés, il en fera une chose agaçante. Donc, même connaître votre méthode, je serais à parcourir à travers le temps, UUID et le secret. Et pour quoi? Une chance que le jeton soit dans le système et non expiré? Et si vous remarquez un client essayant des charges et des charges de jetons, vous les bloquez simplement.
Le secret et UUID sont vos secrets, l'utilisateur ne le connaît pas. Avec les connaissances ci-dessus, vous aurez un jeton unique à chaque fois (en raison du temps ajouté).
Mais pourquoi faites-vous votre propre méthode? Il y a beaucoup de solutions de génération de jetons déjà là.