Vérifier un OTP
Vérifie le code saisi par l'utilisateur.
POST
/v1/otp/verifyBody
{
"phone": "+22375673336",
"code": "1234"
}Exemples
TS=$(date +%s)
BODY='{"phone":"+22375673336","code":"1234"}'
SIG=$(node -e "const c=require('crypto');const s=c.createHmac('sha256','$APP_SECRET').update('POST/v1/otp/verify'+'$TS'+'$BODY').digest('hex');console.log(s)")
curl -X POST https://api.otp.julakai.com/v1/otp/verify \
-H "Content-Type: application/json" \
-H "X-Julak-Key: $APP_KEY" \
-H "X-Julak-Timestamp: $TS" \
-H "X-Julak-Signature: $SIG" \
-d "$BODY"Succès (200)
{
"verified": true,
"verificationToken": "eyJhbG..."
}Le verificationToken est un JWT signé par julakAI (EdDSA, valable 2 minutes). Ton app le vérifie, puis crée sa propre session — julakAI ne gère aucun utilisateur.
Vérifier le verificationToken
Ne fais jamais confiance à un jeton sans le vérifier. Utilise la clé publique de julakAI, publiée sur https://api.otp.julakai.com/.well-known/jwks.json. Elle permet de vérifier un jeton, jamais d'en fabriquer. Impose l'émetteur et ton appKey comme audience : un jeton émis pour une autre app sera refusé.
// npm install jose
const { createRemoteJWKSet, jwtVerify } = require("jose");
const JWKS = createRemoteJWKSet(
new URL("https://api.otp.julakai.com/.well-known/jwks.json")
);
async function numeroVerifie(verificationToken) {
const { payload } = await jwtVerify(verificationToken, JWKS, {
issuer: "https://api.otp.julakai.com",
audience: APP_KEY, // ton jak_live_...
algorithms: ["EdDSA"],
});
return payload.sub; // le numéro vérifié, ex. "+22375673336"
}Payload : { iss, aud, sub, iat, exp, jti, appId, phone, verifiedAt }. jti identifie l'OTP : garde-le quelques minutes pour refuser un jeton rejoué.
Erreurs
401expired_or_not_found401invalid_code403locked