Domanda

Sto lavorando su una pagina ASP.NET che noi, nel codice di rappresentare l'utente richiedente. Stiamo utilizzando il seguente codice per avviare impersonare.

Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()

Dopo di che ci hanno confermato che l'applicazione è in esecuzione nel contesto corretto chiamando:

System.Security.Principal.WindowsIdentity.GetCurrent().Name

Questa operazione riporta la corretta identità dell'utente e l'accesso ai file e altri elementi sembrano essere utilizzando il proprio account. Tuttavia quando si utilizza la classe di Microsoft Application Data Application Block SqlHelper di chiamare a un database utilizzando una connessione attendibile l'autenticazione non riesce per l'utente "NT AUTHORITY \ ANONYMOUS accesso".

in grado di ri-validare dopo il fallimento che l'identità corrente è ancora il nostro account desiderato e non l'account di accesso anonimo.

Qualcuno ha idea del perché questo è? O più precisamente come possiamo ottenere intorno ad esso?

Modifica Alcuni ulteriori informazioni su come le chiamate da queste pagine funzionano.

Facciamo la chiamata impersonate dalla pagina aspx.

Dopo aver impersonare noi chiamiamo fuori ad un montaggio "logica aziendale", che è referecned.

Sappiamo che l'identità contesto è ancora corretta qui.

Dopo di che, l'assemblea "business logic" chiama un altro assembly che esegue effettivamente la chiamata di connessione attendibile. Non possiamo modificare questo montaggio "accesso ai dati", l'eccezione di autenticazione è riportato da questa assemblea pure.

È stato utile?

Soluzione

Credo @ John Sonmez è giusto, si sta colpendo il problema doppio Hop. La rappresentazione è solo metà della storia, è anche necessario guardare delegazione (supponendo che la rete utilizza l'autenticazione Kerberos). Gli articoli qui di seguito sono stati i più utili per aiutare me attraverso lo stesso problema

rappresentazione e delega

ASP.NET Delegazione

Altri suggerimenti

So che ho usato prima rappresentazione in ASP.NET (C # e l'accesso al file system) e mi chiedevo se avessi provato avvolgendo la logica che include currentWindowsIdentity.Impersonate () con un 'Usare / End Using' (per definire in modo esplicito il contesto di sicurezza per un blocco di codice).

Quindi, sarebbe simile a questa:

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top