ver utiles usuarios usuario scripts script saber por para nombre logueado instrucciones equipo ejemplos comandos comando windows silverlight kerberos ntlm

windows - usuarios - scripts powershell utiles



Obtener el nombre de usuario actual de Windows dentro de Silverlight (8)

// una pequeña mejora de la respuesta de Code Maverick usando System.IO.Path.DirectorySeparatorChar rather // then //

Entorno .GetFolderPath (Environment.SpecialFolder.Personal) .Split (new [] {System.IO.Path.DirectorySeparatorChar}, StringSplitOptions.RemoveEmptyEntries) [2];

¿Es posible obtener el nombre de usuario del usuario actualmente conectado con Silverlight? Puede suponer que el usuario tiene el sistema operativo Windows y que la aplicación Silverlight está alojada en Internet Explorer. Obtener la identidad del lado del servidor con ASP.NET no es una opción, esta aplicación de Silverlight se alojará en un archivo HTML estático.


Lamentablemente, no creo que sea posible.

Aunque diga que podemos asumir el sistema operativo Windows / IE, Silverlight por sí mismo no asume esto, por lo que la mayoría de los mecanismos .NET normales que normalmente estaríamos disponibles para obtener el nombre del usuario registrado actualmente no existen dentro del subconjunto del marco disponible para las aplicaciones de Silverlight:

es decir.

System.Net.CredentialCache.DefaultCredentials System.Security.Principal.WindowsIdentity.GetCurrent().Name Environment.UserName

no están disponibles en una aplicación de Silverlight, mientras que en (digamos) una Aplicación de Windows Forms, cada uno de estos mecanismos está disponible para su uso.

Supongo que tiene sentido, en realidad, ya que no hay garantía de que la aplicación Silverlight vaya a ejecutarse sobre una plataforma Windows / IE.

Por cierto, esta pregunta también se hizo aquí:

Nombre de usuario y dominio actual de Windows

y ese hilo parece confirmar que no hay una forma nativa de lograr esto. Luego, el hilo sugiere "inyectar" el nombre de usuario ASP.NET actual de la página ASP.NET que aloja la aplicación Silverlight. en la aplicación de Silverlight antes de que se ejecute en el contexto de la máquina del cliente. Por supuesto, incluso si esto funciona, solo le dará el nombre de usuario de ASP.NET de los formularios de ASP.NET o la autenticación basada en Windows y no el nombre de usuario de Windows del usuario actualmente conectado de la máquina cliente.


Las respuestas altamente votadas a esta pregunta no me ayudaron.

Usando un servicio web ASP.NET, esto funcionó sin embargo:

string userName = System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;

Y esta entrada de blog es la que me puso en la ruta correcta:

http://rouslan.com/2009/03/12/20-steps-to-get-together-windows-authentication-silverlight-and-wcf-service/

ServiceReferences.ClientConfig necesita esto:

<system.serviceModel> <bindings> <basicHttpBinding> <binding ...> <security mode="TransportCredentialOnly" /> </binding> </basicHttpBinding> </bindings> </system.serviceModel>

Y web.config necesita esto:

<system.web> <authentication mode="Windows" /> <identity impersonate="false" /> </system.web> <system.serviceModel> <bindings> <basicHttpBinding> <binding ...> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows"/> </security> </binding> </basicHttpBinding> </bindings> </system.serviceModel>

Esos son los únicos cambios notables que tuve que hacer a una aplicación de Silverlight que de otro modo funcionaba y que anteriormente usaba acceso anónimo para servicios web en IIS.


Pensé que compartiría este código que parece funcionar (YMMV). Está inspirado por la respuesta de CraigTP y sus enlaces que él brindó. Sé que esto no responde directamente la parte sobre la ejecución en una página web estática, pero parece que el OP aceptó el compromiso de APSX.

En mi página ASPX que aloja Silverlight:

<head> <!-- ...snip... --> <script runat="server" language="c#"> void Page_Load() { this.UsernameField.Value = User.Identity.Name; } </script> </head> <body> <input type="hidden" ID="UsernameField" runat="server" /> <!-- ...snip... --> </body>

En mi código silverlight C #:

private string GetCurrentUserName() { HtmlDocument doc = HtmlPage.Document; if (doc == null) { return string.Empty; } HtmlElement elm = doc.GetElementById("UsernameField"); if (elm == null) { return string.Empty; } return elm.GetAttribute("value"); }


Puedes llegar por este camino.

1) Crear la aplicación de servicio web asp.net.

2) Implementar el servicio web y el método para llamar desde la aplicación silverlight.

[WebMethod] public string GetClientUserName() { return System.Web.HttpContext.Current.User.Identity.Name.ToString(); }

3) Implementar esta aplicación de servicio web en el servidor web. No permita que usuarios anónimos accedan a esto.

4) Agregue este servicio a la aplicación Silverlight. (Agregar referencia de servicio)

5) Ahora, puede llamar a este método y obtener el nombre de usuario de la aplicación Silverlight completa.




Environment .GetFolderPath(Environment.SpecialFolder.Personal) .Split(new[] { ''//' }, StringSplitOptions.RemoveEmptyEntries)[2];