Nella mia applicazione WPF voglio consentire agli amministratori di testare una connessione al database utilizzando la sicurezza integrata per vari altri utenti. Quindi ho un modulo che consente all'amministratore di inserire il dominio, il nome utente e la password e quindi testarlo. Sono in grado di gestire in modo sicuro la password fino a quando chiamo LogonUser
nel advapi32.dll
che prende un string password
Windows protetto Impersonificazione?
LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Ho scritto una funzione di utilità che converte il SecureString in una stringa il più sicuro possibile, e poi im chiamata sulla password nella chiamata LogonUser:
LogonUser(UserName, Domain, Helper.ConvertSafely(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Dal momento che la firma per LogonUser prende una stringa, a meno che LogonUser sta prendendo cura della password nella sua esecuzione, potrebbe essere ancora sul mio stack di chiamate in testo normale dopo la chiamata ritorna. C'è un modo più sicuro per impersonare un utente in cui posso essere sicuro che la PW è sicura per tutto il tempo?
Fondamentalmente tutto ciò di cui ho bisogno è un WindowsImpersonationContext
ma mi piacerebbe acquistarlo senza che la password sia mai stata scritta in chiaro.
Ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –
Buona domanda, in realtà. Ma se sei veramente preoccupato per la sicurezza, allora ti suggerisco di considerare anche le fughe di sicurezza non tecniche: i tuoi amministratori non devono avere, né richiedere, alcuna conoscenza delle password dei tuoi utenti. Il fatto che tu stia creando una schermata di nome utente/password suggerisce che l'amministratore inserirà le credenziali dell'utente. Questo mi sembra molto sbagliato. (E se non sono gli amministratori, ma gli utenti stessi, che inseriranno le loro credenziali, in primo luogo, 'RUNAS' l'applicazione con il proprio login, e non sarà necessario eseguire la rappresentazione.) – stakx
il campo di input del modulo originale utilizza comunque una stringa regolare? Inoltre, potresti essere interessato a semplificare il codice 'LogonUser' con la mia libreria [SimpleImpersonation] (https://github.com/mj1856/SimpleImpersonation), come descritto [qui] (http://stackoverflow.com/a/7250145/634.824). Anche se non uso 'SecureString' neanche lì. –