添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

This is not necessarily an issue, I am just curious as to how it works. I have a method:

public static bool UserIsAuthenticated()
    bool isAuthed = false;
        if (HttpContext.Current.User.Identity.Name != null)
            if (HttpContext.Current.User.Identity.Name.Length != 0)
                FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;
                isAuthed = true;
                string MyUserData = ticket.UserData;
    catch { } // not authed
    return isAuthed;

The HttpContext.Current.User.Identity.Name returns null if the user does not exist, but how does it know which usernames exist or do not exist?

This does not seem to address the question "how does HttpContext know which usernames exist?" – TylerH Feb 20, 2020 at 16:25

This depends on whether the authentication mode is set to Forms or Windows in your web.config file.

For example, if I write the authentication like this:

<authentication mode="Forms"/>

Then because the authentication mode="Forms", I will get null for the username. But if I change the authentication mode to Windows like this:

<authentication mode="Windows"/>

I can run the application again and check for the username, and I will get the username successfully.

For more information, see System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName in ASP.NET.

Thanks for the answer but my method in question works my question is how? I dont understand how HttpContext.Current.User.Identity.Name is set? – Srb1313711 Jan 14, 2014 at 15:59

Let's look at an example of one way this works. Suppose you are using Forms Authentication and the "OnAuthenticate" event fires. This event occurs "when the application authenticates the current request" (Reference Source).

Up until this point, the application has no idea who you are.

Since you are using Forms Authentication, it first checks by parsing the authentication cookie (usually .ASPAUTH) via a call to ExtractTicketFromCookie. This calls FormsAuthentication.Decrypt (This method is public; you can call this yourself!). Next, it calls Context.SetPrincipalNoDemand, turning the cookie into a user and stuffing it into Context.User (Reference Source).

Assume a network environment where a "user" (aka you) has to logon. Usually this is a User ID (UID) and a Password (PW). OK then, what is your Identity, or who are you? You are the UID, and this gleans that "name" from your logon session. Simple! It should also work in an internet application that needs you to login, like Best Buy and others.

This will pull my UID, or "Name", from my session when I open the default page of the web application I need to use. Now, in my instance, I am part of a Domain, so I can use initial Windows authentication, and it needs to verify who I am, thus the 2nd part of the code. As for Forms Authentication, it would rely on the ticket (aka cookie most likely) sent to your workstation/computer. And the code would look like:

string id = HttpContext.Current.User.Identity.Name;
// Strip the domain off of the result
id = id.Substring(id.LastIndexOf(@"\", StringComparison.InvariantCulture) + 1);

Now it has my business name (aka UID) and can display it on the screen.

This does not seem to address the question "how does HttpContext know which usernames exist?". – TylerH Feb 20, 2020 at 16:25

Actually it doesn't! It just holds the username of the user that is currently logged in. After login successful authentication, the username is automatically stored by login authentication system to "HttpContext.Current.User.Identity.Name" property.

To check if the current user is authenticated, you MUST (for security reasons) check "HttpContext.Current.User.Identity.IsAuthenticated" boolean property that automatically holds this information instead of writing your own code.

If the current user is NOT authenticated, "HttpContext.Current.User.Identity.Name" property will be null or an empty string or "can take other values" (https://learn.microsoft.com/en-us/dotnet/api/system.security.principal.iidentity.name?view=netframework-4.8) obviously depending on the authentication mode used.

See: https://learn.microsoft.com/en-us/dotnet/api/system.security.principal.iidentity?view=netframework-4.8

Windows authentication gives the information about the user who is logged in. Here is how to set the windows authentication in your project:

you can select project from the menu bar, select yourProject Properties, select Debug, and check the "Enable Windows Authentication" as the image below,

then you will be able to know the user who is logged in by running this code in any controller

var strUserName = User;

When making an HTTP request in .NET and using the HttpContext.Current.User.Identity.Name property to retrieve the name of the current user, no specific headers are sent in the HTTP request.

Instead, when a user logs into a .NET web application, an authentication cookie is set in the user's browser. This cookie is sent on all subsequent requests made by the user while browsing the web application. The cookie contains authentication information, such as the username and a security token, which is used to validate the user's identity on the server.

When the HttpContext.Current.User.Identity.Name property is called, .NET uses the authentication information stored in the cookie to identify the current user and retrieve their name. No specific headers are sent in the HTTP request to retrieve this information, instead the information stored in the authentication cookie that is sent in each subsequent request made by the user is used.

If the IIS server is configured to use Windows Authentication, the authentication token will be automatically generated by the server after the user has successfully authenticated.

To access the server-generated authentication token, you can access the HttpContext.Current.User.Identity property on the server. The Identity object contains information about the authenticated user, such as their username and security roles.

In the case of an HTTP request, the authentication token will be automatically sent to the client in the form of an authentication cookie. The client can include this cookie in subsequent requests to the server to authenticate its identity.

It is important to note that the way Windows authentication is used and the authentication token is accessed can vary depending on the server implementation and the development platform used. Therefore, it is recommended to consult the corresponding documentation for more information.

To find out exactly which Windows authentication mechanism your IIS server is using, you can follow these steps:

  • Open Internet Information Services (IIS) Manager on your server.
  • In the navigation tree, select the website you want to check.
  • Click the "Authentication" icon in the features panel on the right side.
  • In the list of authentication providers, you'll see a list of Windows authentication mechanisms enabled for the website.
  • In general, there are various Windows authentication mechanisms available in IIS such as Basic Authentication, NTLM Authentication, Kerberos Authentication, Integrated Windows Authentication, etc.

    If you would like more details about how authentication is taking place on your server, you can select one of the Windows authentication mechanisms from the list and click "Edit" to get more information about its configuration and operation. You can also consult the Microsoft documentation on how to configure and use Windows authentication in IIS.

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.