Skip to content

OTP

L'endpoint /otp génère et vérifie des mots de passe à usage unique (TOTP/HOTP), compatibles avec Google Authenticator et Aegis.

Paramètres

Le corps de la requête doit être en JSON :

ParamètreRequisDescription
actionOuiAction à effectuer : secret, generate ou verify
secretSelonClé secrète base32 (requise pour generate et verify)
codeSelonCode OTP à vérifier (requis pour verify)
labelNonLibellé du compte pour l'URI otpauth:// (utilisé avec l'action secret)
issuerNonNom de l'émetteur pour l'URI otpauth:// (utilisé avec l'action secret)
algorithmNonAlgorithme HMAC : sha1 (défaut), sha256 ou sha512
digitsNonLongueur du code : 6 (défaut) ou 8
periodNonPériode TOTP en secondes : 15, 30 (défaut) ou 60
counterNonCompteur HOTP (entier). Si fourni, le mode HOTP est utilisé à la place du TOTP

Actions disponibles

ActionDescription
secretGénère un nouveau secret base32 aléatoire et retourne un URI otpauth:// prêt à être scanné en QR code
generateGénère le code OTP courant. Sans counter : mode TOTP (basé sur le temps). Avec counter : mode HOTP (déterministe)
verifyVérifie un code avec une fenêtre de tolérance de ±1 période. Retourne valid et un décalage drift (0, +1 ou -1)

Conformité RFC

Implémente la RFC 4226 (HOTP) et la RFC 6238 (TOTP). Compatible avec Google Authenticator et Aegis.

Exemples de code

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "action": "secret",
    "label": "alice",
    "issuer": "Demo"
  }' \
  "https://api.sylvain.sh/v5/otp"

Champs de réponse

Action secret :

ChampTypeDescription
secretstringClé secrète encodée en base32
uristringURI otpauth:// pour la génération de QR code

Action generate :

ChampTypeDescription
codestringCode OTP généré
typestringtotp ou hotp

Action verify :

ChampTypeDescription
validbooleanIndique si le code est valide
driftnumberDécalage temporel détecté (0, +1 ou -1)

Essayer

Gestion des erreurs

Si les paramètres sont manquants ou invalides, l'API retournera une erreur :

Message d'erreurDescription
Action is requiredLe paramètre action est manquant
Action must be one of: secret, generate, verifyLa valeur de action n'est pas valide
Secret is requiredLe paramètre secret est manquant
Code is requiredLe paramètre code est manquant pour verify
Digits must be 6 or 8La valeur de digits n'est pas valide
Period must be one of: 15, 30, 60La valeur de period n'est pas valide
Algorithm must be one of: sha1, sha256, sha512L'algorithm n'est pas supporté
Counter must be a non-negative integerLa valeur de counter est invalide