Lavoro per una società di hosting e sto per progettare un'app di riposo per una terza parte in modo che possano creare account utente di Active Directory.
Voglio anche che questa API sia asincrona e abbastanza robusta da sopravvivere al riciclaggio e al riavvio del pool di applicazioni. Per farlo, devo salvare lo stato. Per i nuovi account utente, ciò include la password iniziale, a meno che non riesca a convincere la terza parte ad accettare callback o polling.
Le mie opzioni di progettazione sono:
- Async fire-and-forget dove devo salvare la password per i nuovi account.
- Async con callback. È possibile creare nuovi account con una password casuale. La terza parte si ripristina quando viene ricevuta la richiamata.
- Come 2. ma con il polling.
Non posso usare l'hash della password raccomandato, perché l'obiettivo non è usarlo per l'autenticazione successiva, ma per passarlo ad Active Directory.
L'API verrà implementata in stile CQRS, quindi la password non può far parte di alcun evento di dominio. Sarebbe come salvarlo.
Opzione 1: archivia le password temporaneamente in un database separato e lascia che gestisca la crittografia.
Userò Sql Server, e pensavo di poter lasciare che gestisse la crittografia:
- Salva i dati di accesso nel database crittografato.
- Salva l'ID nell'evento di dominio.
Quando l'account utente sta per essere creato:
- Leggi la password.
- Crea l'account.
- Elimina la password dal database.
Opzione 2: archivia le password temporaneamente in un database separato, ma crittografa ogni voce con una chiave diversa.
L'idea è che se il database è compromesso, sarebbe più difficile fare qualcosa di utile con esso perché ogni password ha una chiave diversa. È utile o è una variazione di sicurezza per oscurità?
- Crea una chiave casuale
- Cripta la password
- Salva la password crittografata nel database
- Salva la chiave e l'ID nell'evento di dominio.
Altrimenti uguale all'opzione 1.
Nota
Il database delle password dovrebbe essere quasi vuoto in condizioni normali. È quando qualcosa nel backend dell'API fallisce e nuove richieste di account utente si accumulano, le cose si stanno facendo rischi. Le password iniziali rimarranno nel database fino a quando i problemi non saranno risolti.
I nuovi utenti devono cambiare password al primo accesso.
raccomandazioni?
Probabilmente è ovvio che non sono un esperto di sicurezza. Queste idee sono semplicemente stupide? Esistono metodi accettabili per la memorizzazione temporanea delle password?