Quello che stai cercando di fare è implementare una cosiddetta "parte relying", nel senso che il tuo servizio web si baserà sull'affermazione dell'identità fornita dal token FIDO U2F.
Per capire, è necessario comprendere lo U2F specifications. Soprattutto come deve essere implementato il paradigma challenge-response e come funzionano gli ID delle app e le sfaccettature. Questo è descritto nelle specifiche in dettaglio.
Hai ragione: il codice effettivo necessario per utilizzare FIDO U2F dal front-end dell'applicazione è quasi banale (ovvero se si utilizza l'API JavaScript "di alto livello" anziché il "livello basso" "API MessagePort). La tua applicazione dovrà comunque funzionare con i messaggi generati dal token e convalidarli. Questo non è banale.
Per illustrare come si può perseguire l'implementazione di un sito di parti relying, fornirò alcuni esempi di codice, presi da uno Virtual FIDO U2F Token Extension che ho programmato di recente per ragioni accademiche. Puoi vedere la pagina per il codice di esempio completo.
Prima che gli utenti possano utilizzare i loro gettoni U2F FIDO per l'autenticazione, hanno bisogno di registro con voi. Per consentire loro di farlo, è necessario chiamare window.u2f.register
nel proprio browser. Per fare ciò, è necessario fornire alcuni parametri (di nuovo, leggere le specifiche per i dettagli). Tra questi uno sfida e id della tua app. Per un'app Web, questo deve essere l'origine Web della pagina Web che attiva l'operazione FIDO. Supponiamo che è example.org
:
window.u2f.register([
{
version : "U2F_V2",
challenge : "YXJlIHlvdSBib3JlZD8gOy0p",
appId : "http://example.org",
sessionId : "26"
}
], [], function (data) {
});
Una volta che l'utente esegue un "test presenza utente" (per esempio toccando il token), si riceverà una risposta, che è un oggetto JSON (vedi specifiche per maggiori dettagli)
dictionary RegisterResponse {
DOMString registrationData;
DOMString clientData;
};
Questi dati contengono diversi elementi con cui l'applicazione deve funzionare.

- La chiave pubblica della coppia di chiavi generata - è necessario memorizzare questo per il futuro utilizzo di autenticazione.
- L'handle della chiave della coppia di chiavi generata - È inoltre necessario memorizzarlo per uso futuro.
- Il certificato: è necessario verificare se ci si fida di questo certificato e della CA.
- La firma: è necessario verificare se la firma è valida (vale a dire conferma la chiave memorizzata con il certificato) e se i dati firmati sono i dati previsti.
Ho preparato un rough implementation draft per il server relying party in Java che mostra come estrarre e convalidare queste informazioni ultimamente.
Una volta che la registrazione è completa e si deve in qualche modo memorizzati i dettagli della chiave generata, è possibile segno richieste.
Come hai detto, questo può essere avviato a breve e dolce attraverso l'alto livello di API JavaScript:
window.u2f.sign([{
version : "U2F_V2",
challenge : "c3RpbGwgYm9yZWQ/IQ",
app_id : "http://example.org",
sessionId : "42",
keyHandle: "ZHVtbXlfa2V5X2hhbmRsZQ"
}], function (data) {
});
Qui, è necessario fornire la maniglia chiave, aver ottenuto durante la registrazione. Ancora una volta, dopo che l'utente esegue un "test presenza utente" (per esempio toccando il token), si riceverà una risposta, che è un oggetto JSON (ancora una volta, vedi specifiche per maggiori dettagli)
dictionary SignResponse {
DOMString keyHandle;
DOMString signatureData;
DOMString clientData;
};
È la necessità di convalidare i dati della firma contenuti nel presente documento.

- È necessario assicurarsi che la firma corrisponde alla chiave pubblica che avete ottenuto in precedenza.
- È inoltre necessario verificare che la stringa firmata sia appropriata.
Dopo aver eseguito queste convalide, è possibile considerare l'utente autenticato. Un breve esempio di implementazione del codice lato server per quello è contenuto anche nel mio server example.
Nota che Chrome richiede che l'appId sia https, restituirà un codice di errore se viene utilizzato http. Esistono soluzioni alternative descritte nel codice di riferimento di Chrome all'indirizzo https://github.com/google/u2f-ref-code#option-2-use-the-built-in-chrome-support –