Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find out which account my ASP.NET code is running under?

I am getting an 'Access to the path is denied" error message when running in debug mode. I have tried granting permissions to {MACHINENAME}\ASPNET and to NETWORK SERVICE but this hasn't made any difference. I have also tried < impersonate = true /> using an admin account, this also made no difference. So how do I establish exactly which account is being used?

like image 884
flesh Avatar asked Nov 09 '08 10:11

flesh


People also ask

What account does ASP.NET run under?

The base identity for the ASP.NET ISAPI extension is set to the account of IIS (SYSTEM) and is not configurable. The base identity for the ASP.NET worker process by default is ASPNET, but you can change it to any other system- or user-defined account (including SYSTEM).

What is ASP.NET code?

ASP.NET is an open source web framework, created by Microsoft, for building modern web apps and services with . NET. ASP.NET is cross platform and runs on Linux, Windows, macOS, and Docker.

How do I open an ASP.NET project in Visual Studio?

Start Visual Studio, on the File menu select New, and then select Project. In the New Project dialog box, select Visual Basic or Visual C# as the programming language. In the Templates pane, select ASP.NET Empty Web Application, and name the project SofiaCarRentalWebApp. Click OK to create the solution and the project.


3 Answers

To find out which NT account your app is running under at any given time, do something like (in VB.NET):

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

When using ASP.NET, this account will match the identity of the application pool, which you configure using IIS Manager. Note that the anonymous IIS user isn't much involved with ASP.NET requests.

like image 110
mdb Avatar answered Sep 19 '22 13:09

mdb


C# Code for the vb.net answer

var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var userName = user.Translate(typeof (System.Security.Principal.NTAccount));
like image 27
Adam Avatar answered Sep 20 '22 13:09

Adam


You could use this code:

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)

If you run your application in Visual Studio on your PC (localhost) you'll get your user name. If you deploy ASP.NET web application on IIS, you will probably get the NETWORK SERVICE account, because that is default user running IIS 6.0 (ASPNET on Windows Server 2000's IIS 5.0).

Environment.UserName returns the thread's currently logged-on user. Page.User returns the name that ASP.NET verifies through Authentication and this user in most cases is independent of the Windows logon that is running the current thread. For anonymous requests Page.User is blank, while Environment.User will be NETWORK SERVICE.

As mdb correctly points out in a comment to this answer, Environment.Username will simply return the USERNAME environment variable, which is set on process creation and not updated in case of impersonation and such.

like image 37
splattne Avatar answered Sep 17 '22 13:09

splattne