Devo passare un oggetto NetworkCredential
con le credenziali dell'utente correntemente rappresentato a un servizio Web da un'applicazione asp.net.
Il mio codice è simile al seguente:Impersonation and NetworkCredential
WindowsIdentity windowsIdentity = HttpContext.Current.User.Identity as WindowsIdentity;
WindowsImpersonationContext context = windowsIdentity.Impersonate();
try {
var client = GetClient();
client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
Log("WindowsIdentity = {0}", windowsIdentity.Name);
Log("DefaultNetworkCredentials = {0}", CredentialCache.DefaultNetworkCredentials.UserName);
client.DoSomething();
} finally {
context.Undo();
}
avevo capito che CredentialCache.DefaultNetworkCredentials
dovrebbe dare le credenziali dell'utente attualmente rappresentato, ma non è il caso.
I messaggi di log che ricevo sono
WindowsIdentity = TESTDOMAIN\TESTUSER
DefaultNetworkCredentials =
sto facendo qualcosa di sbagliato? In tal caso, come si ottiene un oggetto NetworkCredential per l'utente attualmente rappresentato?
Non si tratta di una manifestazione del problema del doppio salto? http://blogs.msdn.com/knowledgecast/archive/2007/01/31/the-double-hop-problem.aspx – Richard
Sì, sembra correlato al problema del doppio salto come il token secondario che si avrà in ASP non ti darà le credenziali di rete. –