Perché il codice riportato di seguito funziona correttamente quando si esegue il localhost dell'applicazione Web ma non quando lo si installa su un server IIS?System.DirectoryServices.AccountManagement.UserPrincipal - localhost ma non iis
using (HostingEnvironment.Impersonate())
{
UserPrincipal activeUser = UserPrincipal.Current;
String activeUserSid = activeUser.Sid.ToString();
String activeUserUPN = activeUser.UserPrincipalName;
}
Si prega di non suggerire mi attengo con HttpContext.Current.User
in quanto non fornisce l'accesso al SID o UPN senza ulteriori chiamate ad Active Directory.
L'applicazione Web verrà utilizzata dagli utenti autenticati di Windows da tre domini separati, il server Web è ospitato in un quarto dominio. Il pool di applicazioni è configurato per l'esecuzione con l'identità NetworkService
e la configurazione dell'app Web ha la rappresentazione di identità impostata su true.
Il messaggio di errore quando viene eseguito su IIS è:
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)
EDIT: provato sia il seguente e purtroppo ottenere lo stesso errore.
UserPrincipal userPrincipal = UserPrincipal.Current;
Response.Write(userPrincipal.Name);
Principal userOrGroup = UserPrincipal.Current;
Response.Write(userOrGroup.Name);
Penso che tu abbia ragione. Questo non funziona ... var wi = HttpContext.Current.User.Identity as WindowsIdentity; utilizzando (wi.Impersonate()) { UserPrincipal up = UserPrincipal.Current; activeUserUPN = up.UserPrincipalName; activeUserSid = up.Sid.ToString(); } – RichardD
"l'utente corrente in cui il thread è in esecuzione" in IIS è molto probabilmente l'identità del pool di app IIS; ma quando si esegue sul PC in Visual Studio, Casini o IIS Express, è in esecuzione come te. In tal caso, l'identità dell'utente viene condivisa dal client che richiede la pagina e dal server di sviluppo in esecuzione locale. –