There are many technologies used to
build .NET Web applications. To build effective application-level
authentication and authorization strategies, you need to understand how to
fine-tune the various security features within each product and technology area,
and how to make them work together to provide an effective, defense-in-depth
security strategy. This guide will help you do just that.
First we know ,
1. Authentication (to identify the clients of your application)
2. Authorization (to provide access controls for those clients)
There are two closely interlinked concepts at the
heart of security for distributed applications - authentication and
authorization. Authentication is the process of obtaining some sort of
credentials from the users and using those credentials to verify the user's
identity. Authorization is the process of allowing an authenticated user access
to resources. Authentication is always precedes to Authorization; even if your
application lets anonymous users connect and use the application, it still
authenticates them as being anonymous.
ASP.net provides flexible set of alternatives for
authentication. You can perform authentication yourself in code or delegate
authentication to other authorities (such as Microsoft Passport). In fact
sometimes it seems ASP.net authentication is a bit too flexible; it can be
difficult for a new developer to know just where to start. In this article, we
review the settings in ASP.net and Internet Information Services (IIS) that
control authentication and authorization in ASP.net applications.
An ASP.net application has two separate
authentication layers. That is because ASP.net is not a standalone product.
Rather it is a layer on top of IIS. All requests flow through IIS before they
are handed to ASP.net. As a result, IIS can decide to deny access without the
ASP.net process even knowing that someone requested a particular page. Here is
an overview of the steps in the joint IIS and ASP.net authentication process.
1. IIS first checks to make sure the incoming request comes from an IP address that is allowed access to the domain. If not it denies the request.
2. Next IIS performs its own user authentication if it configured to do so. By default IIS allows anonymous access, so requests are automatically authenticated, but you can change this default on a per - application basis with in IIS.
3. If the request is passed to ASP.net
with an authenticated user, ASP.net checks to see whether impersonation is
enabled. If impersonation is enabled, ASP.net acts as though it were the
authenticated user. If not ASP.net acts with its own configured account.
4. Finally the identity from step 3 is
used to request resources from the operating system. If ASP.net authentication
can obtain all the necessary resources it grants the users request otherwise it
is denied. Resources can include much more than just the ASP.net page itself
you can also use .Net's code access security features to extend this
authorization step to disk files, Registry keys and other resources.
Authentication providers
Assuming IIS passes a requesta to ASP.net, what
happens next? The answer depends on the configuration of ASP.net itself. The
ASP.net architecture includes the concept of and authentication provider a
piece of code whose job is to verify credentials and decide whether a
particular request should be considered authenticated. Out of the box ASP.net
gives you a choice of three different authentication providers.
* The windows Authentication provider lets
you authenticates users based on their windows accounts. This provider uses IIS
to perform the authentication and then passes the authenticated identity to
your code. This is the default provided for ASP.net.
* The passport authentication
provider uses Microsoft's passport service to authenticate users.
* The forms authentication provider
uses custom HTML forms to collect authentication information and lets you use
your own logic to authenticate users. The user's credentials are stored in a
cookie for use during the session.
Selecting an authentication provider is as simple
as making an entry in the web.config file for the application. You can use one
of these entries to select the corresponding built in authentication provider:
authentication mode="windows"
authentication mode="passport"
authentication mode="forms"
ASP.net also supports custom authentication
providers. This simply means that you set the authentication mode for the
application to none, then write your own custom code to perform authentication.
For example, you might install an ISAPI filter in IIS that compares incoming
requests to list of source IP addresses, and considers requests to be
authenticated if they come from an acceptable address. In that case, you would
set the authentication mode to none to prevent any of the .net authentication
providers from being triggered.
Windows Authentication Provider
The Windows authentication provider is the
default provider for ASP .NET. It authenticates users based on the users'
Windows accounts. Windows authentication in ASP.NET actually relies on IIS to
do the authentication. IIS can be configured so that only users on a Windows
domain can log in. If a user attempts to access a page and is not
authenticated, they'll be shown a dialog box asking them to enter their username
and password. This information is then passed to the Web server
and checked against the list of users in the
domain. If the user has supplied valid credentials, access is granted. The
identity of the user is then passed to the ASP.NET engine. More information
about the Windows authentication provider can be found here.
There are four different kinds of Windows authentication options available that can be configured in IIS:
* Anonymous Authentication: IIS
doesn't perform any authentication check. IIS allows any user to access the ASP
.NET application.
* Basic Authentication: For this
kind of authentication, a Windows user name and password have to be provided to
connect. However, this information is sent over the network in plain text and
hence this is an insecure kind of authentication. Basic Authentication is the
only mode of authentication older, non-Internet Explorer browsers support.
* Digest Authentication: It is same
as Basic Authentication but for the fact that the password is hashed before it
is sent across the network. However, to be using Digest Authentication, we must
use IE 5.0 or above.
* Integrated Windows Authentication:
In this kind of authentication technique, passwords are not sent across the
network. The application here uses either the kerberos or challenge/response
protocols to authenticate users. Kerberos, a network authentication protocol,
is designed to provide strong authentication for client-server applications. It
provides the tools of authentication and strong cryptography over the network
to help to secure information in systems across entire enterprise.
Passport Authentication Provider
Passport authentication is a centralized
authentication service. This uses Microsoft's Passport Service to authenticate
the users of an application. If the authentication mode of the application is
configured as Passport and if the users have signed up with Microsoft's
Passport Service, then the authentication formalities are pushed over to
Passport servers.
Passport uses an encrypted cookie mechanism to
identify and indicate authenticated users. If the users have already been
signed into passport when they visit the application page, ASP.NET will
consider them as authenticated. Otherwise, the users will be redirected to
Passport servers to login. Upon successful login, the user is redirected back
to the ASP.NET Web page that they initially tried to access. If you use Hotmail
you already have a Passport account and are familiar with the sign-in process
from an end-user's perspective.
Forms Authentication Provider
The forms authentication provider uses custom
HTML forms to collect authentication information. As an ASP.NET developer using
forms authentication, you must write your own logic/code to check the user's
supplied credentials against a database or some other data store. When a user
is successfully identified via forms authentication, the user's credentials are
stored in a cookie for use during the session
Configuring Authorization
After your application has authenticated users,
you can proceed to authorize their access to resources. But there is a question
to answer first: Just who is the user to whom your are grating access? It turns
out that there are different answers to that question, depending on whether you
implement impersonation. Impersonation is a technique that allows the ASP.NET
process to act as the authenticated user, or as an arbitrary specified user
ASP.NET impersonation is controlled by entries in
the applications web.config file. The default setting is "no
impersonation". You can explicitly specify that ASP.NET shouldn't use
impersonation by including the following code in the file
identity impersonate="false" /identity
With this setting ASP.NET does not perform impersonation.
It means that ASP.NET will runs with its own privileges. By default ASP.NET
runs as an unprivileged account named ASPNET. You can change this by making a
setting in the processModel section of the machine.config file. When you make
this setting, it automatically applies to every site on the server. To user a
high-privileged system account instead of a low-privileged, set the userName
attribute of the processModel element to SYSTEM. Using this setting is a
definite security risk, as it elevates the privileges of the ASP.NET process to
a point where it can do bad things to the operating system.
When you disable impersonation, all the request
will run in the context of the account running ASP.NET: either the ASPNET
account or the system account. This is true when you are using anonymous access
or authenticating users in some fashion. After the user has been authenticated,
ASP.NET uses it own identity to request access to resources.
The second possible setting is to turn on impersonation.
identity impersonate="true" /identity
In this case, ASP.NET takes on the identity IIS
passes to it. If you are allowing anonymous access in IIS, this means ASP.NET
will impersonate the IUSR_ComputerName account that IIS itself uses. If you
aren't allowing anonymous access,ASP.NET will take on the credentials of the
authenticated user and make requests for resources as if it were that user.
Thus by turning impersonation on and using a non-anonymous method of
authentication in IIS, you can let users log on and use their identities within
your ASP.NET application.
Finally, you can specify a particular identity to use for all authenticated requests
identity impersonate="true" password="password" username="DOMAIN\username" /identity
With this setting, all the requests are made as the specified user (Assuming the password it correct in the configuration file). So, for example you could designate a user for a single application, and use that user's identity every time someone authenticates to the application. The drawback to this technique is that you must embed the user's password in the web.config file in plain text. Although ASP.NET won't allow anyone to download this file, this is still a security risk if anyone can get the file by other means.
The above sequence of steps is pictorially depicted in the diagram below:
Video: This video explained basic creation of authentication & authorization just go ahead, it's help to start
Best practices
Now that you know what the choices are for ASP.NET authentication, here are some points that tell which to choose.
* If there is nothing sensitive about the application, stick with no authentication in ASP.NET and anonymous authentication in IIS. That lets anyone who can reach the host computer use the application.
* If you have to authenticate users, there are several choices. If all users have accounts on your network, use Windows authentication in ASP.net with one of the strong IIS authentication settings. If users don't have network accounts, own custom authentication scheme is preferred, means forms authorization.
* If different users must have different privileges, impersonation in ASP.net configuration files needs to be turn on.

No comments:
Post a Comment