Applicazione Web che utilizza Identity Federation e OTP

2

Stiamo eseguendo un'applicazione Web utilizzando la federazione delle identità di un client per autenticare gli utenti. Un nuovo requisito è utilizzare 2FA, abbiamo deciso di utilizzare un algoritmo OTP utilizzando Java, simile a questo è presente su GitHub.

Come dall'algoritmo OTP, dobbiamo fornire una chiave segreta condivisa per ogni utente con cui autenticare il codice OTP. Nel nostro caso d'uso è valida / buona pratica memorizzare una mappatura tra la chiave segreta e gli utenti connessi nel database in-app in modo da poter successivamente convalidare il codice OTP.

Sono nuovo di 2FA, quindi non sono sicuro che l'approccio sopra sia consentito o ciò non è consentito nella federazione delle identità web.

    
posta K.Pil 04.04.2018 - 01:22
fonte

2 risposte

0

Dipende dal provider di identità (IdP) che stai utilizzando per questo scopo.

Caso 1: IdP supporta la convalida del TOTP
Se IdP supporta la convalida del TOTP, puoi chiamare direttamente l'API e non è necessario memorizzare alcuna chiave segreta nella tua app db.

Caso 2: IdP non supporta 2FA
In questo caso, dovrai memorizzare la chiave segreta per ciascun utente e convalidare il TOTP nella tua app stessa.

Esempio: in Shibboleth puoi utilizzarlo con l'estensione Shibboleth-IdP3-TOTP-Auth , mentre alcuni IdP supportano solo l'autenticazione a 2 fattori basata su SMS.
Baiscally, devi andare con le specifiche IdP, a meno che tu non possa scegliere l'IdP. Se hai una scelta, scegli quelli che supportano vari tipi di autenticazione a più fattori (TOTP, SMS, token hardware, ecc.)

    
risposta data 04.04.2018 - 06:55
fonte
0

Sì, è necessario memorizzare una mappatura tra l'utente e il materiale della chiave, che rappresenta il secondo fattore.

Questo è anche raccomandato in RFC4226.

Dovresti occuparti di due cose:

  1. Archivia il materiale chiave in modo crittografato. Ovviamente la chiave di crittografia e il materiale chiave potrebbero trovarsi sullo stesso server. Ma questo almeno ti protegge da iniezioni SQL e forse da perdite di backup del database; -)

  2. Dovresti implementare una mappatura 1: n o forse anche una mappatura n: m. Un utente potrebbe avere più di un secondo fattore. Anche un secondo fattore potrebbe essere utilizzato da più di un utente.

Detto questo, mi chiedo se vuoi davvero implementare il tuo sistema di gestione 2FA! ; -)

Ci sono molte soluzioni là fuori che stanno facendo un ottimo lavoro. Probabilmente dovresti solo migliorare il tuo codice di accesso e non preoccuparti di registrare 2FA, memorizzare chiavi crittografate e mappare ...

Dai un'occhiata a privacyIDEA , che è un mio progetto ( disclaimer ). In questo caso, se un utente ha bisogno di autenticarsi con un secondo fattore, si riduce a chiamare l'API REST

POST https://yourserver/validate/check
user=fred
pass=128930

Fatto. Puoi dare un'occhiata alla documentazione dell'API REST .

    
risposta data 05.04.2018 - 22:44
fonte

Leggi altre domande sui tag