To allow users to logon to your application with a different user name from the one they use for the workstation...
By submitting your personal information, you agree that TechTarget and its partners may contact you regarding relevant content, products and special offers.
you will need to use ASP.NET impersonation and create a customized impersonation solution. With ASP.NET impersonation, IIS is responsible for authenticating users against the domain and passing on to ASP.NET an authenticated token, which can then act on behalf of the client. The main purpose of ASP.NET impersonation is to allow the ASP.NET execution engine to execute code in the context of an authenticated and authorized client instead of using the same user account as the ASP.NET process, which is typically the ASP.NET account.
Your changed user solution will need to:
- Authenticate the user against your domain
- Create a new System.Security.Principal.WindowsIdentity instance that represents the user's account
- Impersonate the new Windows identity
- Stop impersonating and revert back to the user logged on to the machine
To provide users with a logon choice you can use the Win32 LogonUser API call. This will try to authenticate an account to your Windows domain using the security credentials that are passed to it. As you suggest, you can also have a button that calls this function with the rest of your code and allow users to logon to your application as a different user. If the logon is successful, LogonUser returns true and passes a token handle back to IIS that represents the authenticated user to impersonate. Now that you have a token representing your authenticated user, you need to create an instance of WindowsIdentity which implements the System.Security.Principal.IIdentity interface and is used to represent a Windows user in a .NET application. To create a WindowsIdentity instance, pass the token handle received from the LogonUser to the WindowsIdentity constructor, WindowsIdentity.Impersonate(). WindowsIdentity.Impersonate() will return a System.Security.Principal.WindowsImpersonationContext instance, which represents a Windows user. Finally, to terminate the impersonation call the WindowsImpersonationContext.Undo() method.
As you can see, this not a trivial undertaking and will require careful testing to ensure that your overall security is not weakened. Another option is to consider using Certificate Authentication, whereby client certificates are mapped to Windows accounts in either a Domain or Active Directory. By issuing users digital certificates stored on a token, such as a USB key, they can authenticate themselves by inserting the token when requested by the application. By using the Windows Authentication Provider in ASP.NET your application will run as the user to which the certificate is mapped. However, the costs of issuing and managing client certificates can be high and may not be appropriate if the data being accessed is not particularly sensitive.
Dig Deeper on Active Directory security
Related Q&A from Michael Cobb
A technique known as the GhostHook attack can get around PatchGuard, but Microsoft hasn't patched the flaw. Expert Michael Cobb explains why, as well...continue reading
Software developed by the hacking group Platinum takes advantage of Intel AMT to bypass the built-in Windows firewall. Expert Michael Cobb explains ...continue reading
Tensions between the U.S. and Russia have led to source code reviews on security products, but the process isn't new. Expert Michael Cobb explains ...continue reading
Have a question for an expert?
Please add a title for your question
Get answers from a TechTarget expert on whatever's puzzling you.