.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
¿Has probado WindowsIdentity.GetCurrent ()?
También puedes mirar este ejemplo ... http://www.codeproject.com/KB/vb/Windows_Service.aspx
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.
Lamentablemente, tiene que interoperar con la WMI así:
http://www.codeproject.com/Articles/28161/Using-WMI-to-manipulate-services-Install-Uninstall
El valor que busca consultar es StartName, que evaluará algo como "NT Authority / NetworkService" (o lo que sea que esté usando). Si mezcla la segunda parte de este artículo con la primera parte, obtenerlo debería ser bastante sencillo.
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