Codici TOTP
Il TOTP è il codice a sei cifre che cambia ogni trenta secondi usato dalla verifica in due passaggi. Si calcola dal secret condiviso con il servizio e dall'ora corrente. Questo strumento del KIT genera il codice e il relativo URL otpauth nel browser, per configurare o testare la 2FA.
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
Come funziona un codice a tempo
Il servizio e la tua app condividono un secret una volta sola, di solito scansionando un codice QR. Da lì in poi entrambi calcolano lo stesso codice a sei cifre combinando il secret con l'orario, in finestre di trenta secondi. Nessuno scambio via rete a ogni accesso: ecco perché il TOTP funziona anche offline. L'importante è che l'orologio del dispositivo sia sincronizzato, altrimenti i codici non combaciano.
Configurare o testare la 2FA
Due scenari. Stai aggiungendo la verifica in due passaggi a un'app che sviluppi e vuoi controllare che i codici generati dal tuo server coincidano con quelli di un'app reale: qui incolli il secret e confronti. Oppure stai integrando l'onboarding e ti serve l'URL otpauth da trasformare in codice QR per l'utente. In entrambi i casi vedi codice e conto alla rovescia della finestra.
Il secret non lascia la pagina
Il secret di un TOTP è la chiave di tutta la 2FA: chi lo possiede può generare i codici al posto tuo. Per questo il calcolo avviene interamente nel browser, offline. Il secret non viene inviato online, non transita da nessun server, non resta salvato. Puoi usarlo per il debug senza il timore di esporre una credenziale che, di fatto, vale quanto una password.
Nei test automatici, via API
$0.002 a richiesta quando ti serve generare codici TOTP dentro una suite di test automatici, per esempio per collaudare il flusso di login end-to-end. Per un controllo manuale la pagina è gratis. Ricorda: è uno strumento per sviluppo, non un sostituto dell'app di autenticazione sul telefono dell'utente.
Casi d'uso
Collaudare il login a due fattori
Uno sviluppatore aggiunge la 2FA al pannello di un gestionale. Genera i codici TOTP dal secret di test e verifica che il server accetti quello giusto e rifiuti quello della finestra precedente.
Generare il QR per l'onboarding
Un'app deve mostrare all'utente il codice QR per aggiungere l'account all'app di autenticazione: qui parte dal secret e ottiene l'URL otpauth da rendere in codice QR.
Diagnosticare codici che non tornano
I codici di un utente vengono rifiutati. Confrontando il codice generato qui con quello dell'app si scopre che l'orologio del server è indietro di un minuto: bastava sincronizzarlo.
Domande frequenti
Ogni quanto cambia il codice TOTP?
Di norma ogni 30 secondi. Il codice è valido nella sua finestra temporale; molti server accettano anche la finestra immediatamente precedente per tollerare piccoli sfasamenti d'orario.
Perché i miei codici non coincidono?
Quasi sempre è l'orologio: il TOTP dipende dall'ora, quindi se il server o il dispositivo sono desincronizzati i codici non tornano. Controlla la sincronizzazione oraria da entrambe le parti.
Il secret viene inviato online?
No. Il calcolo avviene nel browser, offline: il secret non lascia il dispositivo e non resta salvato. Puoi usarlo per il debug in tranquillità.
Posso usarlo al posto dell'app di autenticazione?
È pensato per sviluppo, test e debug. Per la 2FA reale del tuo account usa un'app di autenticazione sul telefono: lì il secret resta protetto nel dispositivo.
È gratis?
Sì, nel browser è gratis e senza registrazione. Via API, per generare codici in automatico, costa $0.002 a richiesta.
Genera anche l'URL otpauth per il QR?
Sì. Oltre al codice a sei cifre ottieni l'URL otpauth, quello da trasformare in codice QR per far aggiungere l'account a un'app di autenticazione.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/totp \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/dev/totp", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/totp",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/totp", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/totp", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"items": [
"valor-1",
"valor-2"
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.totp",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |