25-01-2019, 11:55 PM
D'accord, je comprends mieux en effet.
Voilà finalement à quoi ressemble donc le message de validation du mail: une image pour faire automatiquement la requête de validation à l'ouverture du mail (si Ter Rowan considère que je suis de confiance ), doublé d'un lien explicite vers cette même page de validation (si Ter Rowan est suspicieux ou si le client mail ne peut pas charger les images distantes)
Et en cas d'échec de validation ou d'expiration:
Techniquement, c'est une URL GET vers une page du site, avec l'id du compte à valider dans les paramètres, ainsi que l'addresse email (hashée, pour qu'elle ne traine pas en clair, même si c'est pas top critique, ça ne coûte rien) à laquelle le message a été envoyé et une date d'expiration (histoire que le lien ne soit plus utilisable, et que le joueur ouvre sa boite mail dans la foulée; après, j'ai mis 1 heure, mais je ne sais pas trop si ce sera un bon délai).
Le tout signé par un token: je prends les données GET de l'URL, je les base64, je les concatène avec des ":" qui ne font pas parti des caractères base64 (ce qui évite d'avoir des collisions de signature, aka sans séparateur, signer "ab" concaténé avec "c" ou signer "a" concaténé avec "bc" serait pareil, avec un séparateur, je règle ce problème), j'ajoute un token secret (statique et global au jeu, ça suffit) et je hmac le tout. Même principe pour faire la vérification (j'ai aussi implémenté la version "signature avec openSSL + RSA" mais c'est overkill je pense).
Voilà finalement à quoi ressemble donc le message de validation du mail: une image pour faire automatiquement la requête de validation à l'ouverture du mail (si Ter Rowan considère que je suis de confiance ), doublé d'un lien explicite vers cette même page de validation (si Ter Rowan est suspicieux ou si le client mail ne peut pas charger les images distantes)
Et en cas d'échec de validation ou d'expiration:
Techniquement, c'est une URL GET vers une page du site, avec l'id du compte à valider dans les paramètres, ainsi que l'addresse email (hashée, pour qu'elle ne traine pas en clair, même si c'est pas top critique, ça ne coûte rien) à laquelle le message a été envoyé et une date d'expiration (histoire que le lien ne soit plus utilisable, et que le joueur ouvre sa boite mail dans la foulée; après, j'ai mis 1 heure, mais je ne sais pas trop si ce sera un bon délai).
Le tout signé par un token: je prends les données GET de l'URL, je les base64, je les concatène avec des ":" qui ne font pas parti des caractères base64 (ce qui évite d'avoir des collisions de signature, aka sans séparateur, signer "ab" concaténé avec "c" ou signer "a" concaténé avec "bc" serait pareil, avec un séparateur, je règle ce problème), j'ajoute un token secret (statique et global au jeu, ça suffit) et je hmac le tout. Même principe pour faire la vérification (j'ai aussi implémenté la version "signature avec openSSL + RSA" mais c'est overkill je pense).