Les mots de passe à usage unique en PHP, les six chiffres que vos utilisateurs recopient depuis leur téléphone. Deux algorithmes, aucune dépendance à un fournisseur, et les mêmes codes que toutes les applications d’authentification savent déjà lire.
Ce que ça couvre
- TOTP, RFC 6238 : un code dérivé de l’heure courante, valable pendant une courte fenêtre. C’est ce que presque toutes les applications appellent l’authentification à deux facteurs.
- HOTP, RFC 4226 : un code dérivé d’un compteur, incrémenté à chaque usage. Utile quand il n’y a d’horloge fiable d’aucun côté.
- Les URI de provisionnement, la chaîne
otpauth://derrière le code QR que vos utilisateurs scannent pour enrôler un appareil. - La vérification avec tolérance, pour qu’un code saisi quelques secondes trop tard fonctionne encore sans élargir la fenêtre pour tout le monde.
Les codes sont compatibles avec Google Authenticator, FreeOTP et les autres applications d’authentification : l’intérêt d’un standard est que personne n’ait à savoir laquelle votre utilisateur a choisie.
Pour démarrer
composer require spomky-labs/otphp
PHP 8.1 ou plus récent. La bibliothèque a trois dépendances et aucune ne parle au réseau.
Une chose à savoir : l’horloge
Un code fondé sur le temps ne vaut que ce que vaut l’horloge qui l’a produit. Depuis la 11.4, la bibliothèque accepte une horloge PSR-20, et à partir de la version 12 elle en exigera une. Passer votre propre horloge n’est pas une cérémonie : c’est ce qui vous permet de tester l’expiration d’un code sans attendre trente secondes, et ce qui empêche un serveur qui dérive de rejeter des codes qui étaient justes.
Si vous vous demandez ce que sont vraiment ces six chiffres, il y a un article là-dessus.
Où regarder ensuite
La documentation vit dans le dépôt et parcourt les deux algorithmes avec des exemples qui fonctionnent. Le code source est sur GitHub, sous licence MIT.