2008-11-09 13 views
14

Viene visualizzato un messaggio di errore "Accesso al percorso negato" quando si esegue in modalità di debug. Ho provato a concedere le autorizzazioni a {MACHINENAME} \ ASPNET e al SERVIZIO DI RETE ma ciò non ha fatto alcuna differenza. < impersonate = true /> utilizzando un account amministratore, anche questo non ha fatto alcuna differenza Quindi come stabilire esattamente quale account viene utilizzato?Come scoprire quale account è in esecuzione il mio codice ASP.NET?

risposta

13

Per scoprire quale account NT è in esecuzione l'app in un determinato momento, fare qualcosa di simile (in VB.NET):

Dim User = System.Security.Principal.WindowsIdentity.GetCurrent.User 
    Dim UserName = User.Translate(GetType(System.Security.Principal.NTAccount)).Value 

Quando si utilizza ASP.NET, questo account corrisponderà l'identità del pool di applicazioni, che si configura utilizzando Gestione IIS. Si noti che l'utente IIS anonimo non è molto coinvolto nelle richieste ASP.NET.

8

È possibile utilizzare questo codice:

C#

Response.Write("Windows Account which runs ASP.NET is: " 
    + Environment.Username); 

VB.NET

Response.Write("Windows Account which runs ASP.NET is: " _ 
    & Environment.Username) 

Se si esegue l'applicazione in Visual Studio sul PC (localhost) otterrai il tuo nome utente. Se si distribuisce l'applicazione Web ASP.NET su IIS, si otterrà probabilmente l'account SERVIZIO DI RETE, poiché questo è l'utente predefinito che esegue IIS 6.0 (ASPNET su IIS 5.0 di Windows Server 2000).

Environment.UserName restituisce l'utente attualmente connesso al thread. Page.User restituisce il nome che ASP.NET verifica tramite Autenticazione e questo utente nella maggior parte dei casi è indipendente dall'accesso a Windows che esegue il thread corrente. Per le richieste anonime, la pagina.User è vuota, mentre Environment.User sarà NETWORK SERVICE.

Come mdb indica correttamente in un commento a questa risposta, Environment.Username restituirà semplicemente la variabile di ambiente USERNAME, che viene impostata sulla creazione del processo e non aggiornata in caso di rappresentazione e così via.

+1

Non tenere a mente, però, che Environment.Username restituirà semplicemente la variabile d'ambiente USERNAME, che è impostato sulla creazione di processo e non aggiornato in caso di furto d'identità e così via. – mdb

14

codice C# per la risposta vb.net

var user = System.Security.Principal.WindowsIdentity.GetCurrent().User; 
var userName = user.Translate(typeof (System.Security.Principal.NTAccount)); 
-3
strint t=System.Web.Security.Membership.GetUser().UserName.ToString(); 
+0

A beneficio dei futuri lettori puoi aggiungere del testo per spiegare perché questa risposta è preferibile a quelli più vecchi? – Flexo

+0

Questo non funziona. Questo restituisce il nome utente dell'utente connesso - non il nome utente dell'utente che esegue l'applicazione Web, che è ciò che l'OP chiedeva. – NickG

Problemi correlati