.net defaultnetworkcredentials

.net - ¿Cómo se obtienen las credenciales(NetworkCredential) del usuario actualmente conectado?



defaultnetworkcredentials (6)

¿Ha intentado establecer la política principal para el dominio de aplicación al inicio de la aplicación?

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

Establecer este valor antes de acceder al objeto principal actual a través del subproceso asegura que la identidad de Windows se use en este objeto.

editar - Estoy bastante seguro de que esto funciona para DefaultNetworkCredentials. Lo usé para acceder a un servicio web con autenticación de Windows desde una aplicación de Windows Forms.

Estoy escribiendo un código para utilizar un componente de terceros, y necesito suministrar un objeto que implemente ICredentials cuando empiece a usarlo.

Si escribo lo siguiente ...

var credential = new NetworkCredential("MyUsername", "MyPassword");

... y pasa "credencial", está bien. Pero me gustaría pasar las credenciales del usuario actual (es un servicio de Windows, por lo que se ejecuta como un usuario específico) .

He intentado los dos siguientes, pero ninguno parece funcionar (ni devolver nada) :

NetworkCredential credential = System.Net.CredentialCache.DefaultCredentials; NetworkCredential credential = CredentialCache.DefaultNetworkCredentials;

¿Alguien puede sugerir cómo adquirir un objeto apropiado, que representa las credenciales del nombre de usuario con el que se ejecuta el servicio?

Gracias, Ross



La situación de seguridad ideal es que la contraseña de un usuario conectado no se almacena en ningún lugar de la memoria. Tampoco está almacenado en ningún lugar del disco. Existe solo como un valor hash que se compara con una cadena ingresada por un ser humano. Almacenar una contraseña en claro es intrínsecamente un riesgo de seguridad y debe evitarse siempre que sea posible.

Dado este principio, NO HAY parte del sistema operativo que incluso TIENE la contraseña de usuario en claro, y mucho menos estar dispuesto a dárselo.



Necesita hacer una suplantación, por ejemplo:

System.Security.Principal.WindowsImpersonationContext impersonationContext; impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); //Insert your code that runs under the security context of the authenticating user here. impersonationContext.Undo();

http://support.microsoft.com/kb/306158

O puede usar web.config:

<identity impersonate="true" />


si solo desea ejecutar un proceso dado que el usuario actual agrega el verbo: "runas " & Environment.UserName

Si desea ejecutar el proceso como administrador, simplemente escribió "runas"

en vb.net

Dim ps As New System.Diagnostics.ProcessStartInfo("filepath", "arguments") ps.Verb = "runas" ''run as admin ''ps.Verb = "runas " & Environment.UserName''run as current user, by default Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(ps)

si desea obtener la contraseña del usuario actual, no puede, de hecho, es una práctica insegura. ¿Qué derecho y para qué propósito necesita su servicio para que mi contraseña de Windows sea secreta? por ejemplo, es como darle el código PIN de tu teléfono a whatsapp