Windows Authentication
Windows Authentication
Windows Authentication
Anonymous authentication is fine for web sites that contain public information that everyone can see. However, if the web site contains private information or performs tasks such as booking tickets, placing orders etc, then the users need to be authenticated and authorised. Windows authentication identifies and authorizes users based on the server's user list. Access to resources on the server is then granted or denied based on the user account's privileges. Windows authentication is best suited for Intranet Web applications. The advantage of Windows authentication is that, the Web application can use the exact same security scheme that applies to your corporate network. User names, passwords, and permissions are the same for network resources and Web applications. Security for an asp.net web application can be configured at 2 places: In IIS and in the application itself. If both, anonymous and windows authentication are enabled in IIS, and, if we don't have a deny entry for anonymous users, in the web.config file, then the resources on the web server are accessed using anonymous authentication. Anonymous authentication can be disabled in IIS or in web.config file. If you want to have the application code executed using the logged in user identity, then enable impersonation. Impersonation can be enabled thru IIS or by setting identity element's impersonate attribute to true in web.config file. If impersonation is enabled, the application executes using the permissions found in your user account. So, if the logged in user has access, to a specific network resource, only then will he be able to access that resource thru the application. ? and * have special meaning when used in the authorization element in web.config. ? (Question Mark) - Indicates anonymous users * (Star) - Indicates all users 1. Allowing or denying access to specific users 2. Using windows roles to control access 3. How to programmatically check if the user belongs to a specific role role if (User.IsInRole("Administrators")) { // Do Admin Stuff
When you configure your ASP.NET application as windows authentication it will use local windows user and groups to do authentication and authorization for your ASP.NET pages. Below is a simple snap shot which shows my windows users and roles on my computer.
We will create two simple ASPX pages User.aspx page and Admin.aspx page. Administrator user will have access to both Admin.aspx and User.aspx page , while user Shiv will only have access to User.aspx page.
Step 1:- Creation of web site. The next step is to create a simple web site with 3 pages (User.aspx, Admin.aspx and Home.aspx) as shown below.
Step 2:- Create user in the windows directory The next step is we go to the windows directory and create two users. You can see in my computer we have Administrator and Shiv.
Step 3:- Setup the web.config file In web.config file set the authentication mode to Windows as shown in the below code snippets. Collapse | Copy Code
<authentication mode="Windows"/>
We also need to ensure that all users are denied except authorized users. The below code snippet inside the authorization tag that all users are denied. ? indicates any Collapse | Copy Code
unknown user. <authorization> <deny users="?"/> </authorization>
Step 4:- Setup authorization We also need to specify the authorization part. We need to insert the below snippet in the web.config file stating that only Administrator users will have access to
Step 5:-Configure IIS settings The next step is to compile the project and upload the same on an IIS virtual directory. On the IIS virtual directory we need to ensure to remove anonymous access and check the integrated windows authentication as shown in the below figure.
Now if you run the web application you will be popped with a userid and password box as shown below.
Once you enter credentials you should be able to see home.aspx as shown below.
In case you are not an administrator (i.e in this case its shiv) and you navigate to Admin.aspx it will throw an error as shown in the below figure.
In case you want to read who the user is and with what authorization rights has he logged in you can use WindowsPrincipal and WindowsIdentity. These two objects represent users who have been authenticated with Windows authentication. You can also get the roles these users have.
Basic Authentication
When basic authentication is selected the userid and password are passed by using Base64 encoded format . i.e. why the name is basic authentication. Base64 is a encoding and not encryption. So its very easy to crack. You can read more about Base64 encoding at http://en.wikipedia.org/wiki/Base64 . Its a very weak form of protection.
Below is a small demonstration how easy it is to crack a basic authentication. You can see in the below figure we have checked Basicauthentication check and we ran the fiddler tool to see the data.
We then copied the Authorization:Basic data and ran the below program. LOL, we can see our windows userid and password.
Below is the code snippet of how to decode Base64 encoding. Collapse | Copy Code
public static string DecodeFrom64(string encodedData) { byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); string returnValue = System.Text.Encoding.ASCII.GetString(encodedDataAsBytes); return returnValue;}
Digest Authentication
The problem associated with basic authentication is solved by using digest authentication. We saw in our previous section how easy it was to crack basic authentication. Digest authentication transfers data over wire as MD5 hash or message digest. This hash or digest is difficult to dechiper. In other words digest authentication replaces the lame basic authentication.
Said and done there one of the big problems of digest authentication is its not supported on some browsers.
Integrated Authentication
Integrated Windows authentication (formerly called NTLM, and also known as Windows NT Challenge/Response authentication) uses either Kerberos v5 authentication or NTLM authentication, depending upon the client and server configuration. Lets try to understand what NTLM and Kerberos authentication is all about and then we will try to understand other aspects of integrated authentication. NTLM is a challenge response authentication protocol. Below is how the sequence of events happens: Client sends the username and password to the server. Server sends a challenge. Client responds to the challenge with 24 byte result. Servers checks if the response is properly computed by contacting the domain controller.
Kerberos is a multi-hounded (3 heads) who guards the gates of hades. In the same way Kerberos security has 3 participants authenticating service, service server and ticket granting server. Lets try to understand step by step how these 3 entities participate to ensure security.
Kerberos uses symmetric key for authentication and authorization. Below is how the things work for Kerberos: In step 1 client sends the username and password to AS (Authenticating service). AS authenticates the user and ensures that he is an authenticated user. AS then asks the TGT (Ticket granting service) to create a ticket for the user. This ticket will be used to verify if the user is authenticated or not. In other words in further client interaction no password will be sent during interaction.
Order of Precedence
One of the things which you must have noticed is that integrated, digest and basic authentication are check boxes. In other words we can check all the three at one moment of time. If you check all the 3 options at one moment of time depending on browser security support one of the above methods will take precedence.
Lets understand how the security precedence works as per browser security. Browser makes a request; it sends the first request as Anonymous. In other words it does not send any credentials. If the server does not accept Anonymous IIS responds with an "Access Denied" error message and sends a list of the authentication types that are supported by the browser. If Windows NT Challenge/Response is the only one supported method then the browser must support this method to communicate with the server. Otherwise, it cannot negotiate with the server and the user receives an "Access Denied" error message. If Basic is the only supported method, then a dialog box appears in the browser to get the credentials, and then passes these credentials to the server. It attempts to send these credentials up to three times. If these all fail, the browser is not connected to the server. If both Basic and Windows NT Challenge/Response are supported, the browser determines which method is used. If the browser supports Windows NT Challenge/Response, it uses this method and does not fall back to Basic. If Windows NT Challenge/Response is not supported, the browser uses Basic. You can read more about precedence from http://support.microsoft.com/kb/264921.
In order words the precedence is:1. Windows NT challenge ( Integrated security) 2. Digest 3. Basic
Browse support Basic Digest Integrated windows Kerberos Challenge / response IE5 and above Almost all browsers