¿Por qué el código siguiente funciona bien cuando ejecuto mi aplicación web localhost pero no cuando lo instalo en un servidor IIS?System.DirectoryServices.AccountManagement.UserPrincipal - localhost pero no iis
using (HostingEnvironment.Impersonate())
{
UserPrincipal activeUser = UserPrincipal.Current;
String activeUserSid = activeUser.Sid.ToString();
String activeUserUPN = activeUser.UserPrincipalName;
}
Por favor, no sugieren me quedo con HttpContext.Current.User
, ya que no proporciona acceso a SID o UPN sin llamadas adicionales a Active Directory.
La aplicación web será utilizada por usuarios autenticados de Windows de tres dominios separados, el servidor web está alojado en un cuarto dominio. El grupo de aplicaciones está configurado para ejecutarse con la identidad NetworkService
y la configuración de la aplicación web tiene la suplantación de identidad establecida en verdadero.
El mensaje de error cuando se ejecuta en IIS es:
Error in Page_Load(): UserPrincipal.Current.
System.InvalidCastException: Unable to cast object of type 'System.DirectoryServices.AccountManagement.GroupPrincipal' to type 'System.DirectoryServices.AccountManagement.UserPrincipal'.
at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue)
at System.DirectoryServices.AccountManagement.UserPrincipal.get_Current()
at webapp.Details.Default.Page_Load(Object sender, EventArgs e)
EDITAR: Probado tanto en lo siguiente y por desgracia conseguir el mismo error.
UserPrincipal userPrincipal = UserPrincipal.Current;
Response.Write(userPrincipal.Name);
Principal userOrGroup = UserPrincipal.Current;
Response.Write(userOrGroup.Name);
Creo que tienes razón. Esto tampoco funciona ... var wi = HttpContext.Current.User.Identity como WindowsIdentity; usando (wi.Impersonate()) { UserPrincipal up = UserPrincipal.Current; activeUserUPN = up.UserPrincipalName; activeUserSid = up.Sid.ToString(); } – RichardD
"el usuario actual bajo el cual se está ejecutando el subproceso" en IIS es probablemente la identidad del grupo de aplicaciones de IIS; pero cuando se ejecuta en su PC en Visual Studio, Casini o IIS Express, se ejecuta como usted. En ese caso, su identidad es compartida por el cliente que solicita la página y el servidor de desarrollo que se ejecuta localmente. –