Web.config配置身份验证
2012-03-29 10:33
190 查看
Web.config文件中可配置的身份验证方式有Windows、Forms、PassPort、None:
其中,比较常见的是:form
1.None
None表示不执行身份验证。
2.Windows
IIS根据应用程序的设置执行身份验证,其中包含匿名身份验证、NTLM身份验证、base64编码身份验证等。此外,NTFS在文件和目录上的权限(访问控制列表)将决定对目录中资源的访问。
3.Forms
编程者创建一个用于登录的WEB窗体,然后在应用程序中用于验证所有浏览用户的身份。用户第一次访问程序中任何窗体都将被重定向到这个登录窗体,当用户登录成功后,其登录信息被存储在Cookie中,并转向所访问过的其他窗体。
4.Passport
Passport身份验证是通过Microsoft的集中身份验证服务执行的,它为成员站点提供单独登录和核心配置文件服务。
项目中比较常用的是form验证,这里简单介绍一下:
首先介绍一下配置的含义:
<allow>节点:顾名思义就是允许访问的意思,<allow users="admin"/>就是允许用户名为"admin"的用户访问。
<deny>节点:就是禁止访问。这里用到了一个通配符“*”,通配符有两个:*代表所有用户,还有一个“?”代表所有匿名用户。所以<deny users="*"/>就是不允许所有用户访问的意思啦,当然如果是:<deny users="?"/>那意思就是不允许所有匿名用户访问。
需要说明的是:所有的配置都是按照从上到下的顺序来匹配的,一但匹配成功,就不再向下匹配。举个例子:
<authorization>
<allow users="admin"/>
<allow users="zhangsan"/>
<deny users="*"/>
</authorization>
ASP.NET首先检测当前登录的用户名=="admin"?如果等于则不继续判断,直接允许该用户访问。如果不等于则继续判断当前登录的用户名=="zhangsan"等于,则允许访问,不等于则接着向下,读取到了<deny users="*"/>这个配置,拒绝所有用户访问,跳转到LoginUrl指定的页面要求重新登录。
可是如果这样,只能实现目录一级的权限控制,如果要控制某个文件的访问权限,又该如何做呢?难道非得把这个文件放到一个文件夹中,然后再添加web.config进行控制么?答案是否定的,对于单个文件的访问控制,ASP.NET也有相应的配置:
<configuration>
<location path="a.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<system.web>
<authorization>
<allow users="admin"/>
<allow users="zhangsan"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
看上面这个配置,我们可以在<system.web>节点之上(必须是上面)再增加一个<location>节点,通过path属性指明location内的配置是单独针对哪个文件即可。具体内容我就不多说了,想必大家也都看得懂。不过需要注意的一点就是:location节点可以有多个。这意味着同一个目录下的不同文件可以有不同的访问权限。
好了,配置到这里算是完成一多半了。还有一个问题就是:如果我们的用户比较多,那么需要在配置文件中把这些用户全部罗列其中。并且以后添加了新用户,还得继续修改配置,太麻烦了!该怎么办呢?通用的做法就是引入角色的概念。给所有的用户分配一个角色,比如:users,admin等。然后我们只需要控制这些角色的访问权限即可。以后添加了新用户只需给这个新用户分配角色,而不用去修改配置,实在是方便。其实,membership也提供了角色的概念,只需要简单的配置一下就可以实现了。
要实现角色功能,非常简单,我们还是去machine.config的<system.web>节点下面找到<roleManager>节点,然后整个节点复制过来到web.config中去,一般会有两个<add>子结点,我们删除一个,留下一个就可以了。全部内容如下:
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
这个配置比较简单,各项配置和前面配置都一样,不再多说。稍微修改一下:
<roleManager enabled="true" defaultProvider="myAspNetSqlRoleProvider">
<providers>
<add name="myAspNetSqlRoleProvider"
connectionStringName="ConnectionString"
applicationName="TestMembership"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
注意:这个roleManager多了个属性enable="true",这是因为角色管理默认情况下是关闭的,所以我们必须得设置为开启才行。
其中,比较常见的是:form
1.None
None表示不执行身份验证。
2.Windows
IIS根据应用程序的设置执行身份验证,其中包含匿名身份验证、NTLM身份验证、base64编码身份验证等。此外,NTFS在文件和目录上的权限(访问控制列表)将决定对目录中资源的访问。
3.Forms
编程者创建一个用于登录的WEB窗体,然后在应用程序中用于验证所有浏览用户的身份。用户第一次访问程序中任何窗体都将被重定向到这个登录窗体,当用户登录成功后,其登录信息被存储在Cookie中,并转向所访问过的其他窗体。
4.Passport
Passport身份验证是通过Microsoft的集中身份验证服务执行的,它为成员站点提供单独登录和核心配置文件服务。
项目中比较常用的是form验证,这里简单介绍一下:
首先介绍一下配置的含义:
<allow>节点:顾名思义就是允许访问的意思,<allow users="admin"/>就是允许用户名为"admin"的用户访问。
<deny>节点:就是禁止访问。这里用到了一个通配符“*”,通配符有两个:*代表所有用户,还有一个“?”代表所有匿名用户。所以<deny users="*"/>就是不允许所有用户访问的意思啦,当然如果是:<deny users="?"/>那意思就是不允许所有匿名用户访问。
需要说明的是:所有的配置都是按照从上到下的顺序来匹配的,一但匹配成功,就不再向下匹配。举个例子:
<authorization>
<allow users="admin"/>
<allow users="zhangsan"/>
<deny users="*"/>
</authorization>
ASP.NET首先检测当前登录的用户名=="admin"?如果等于则不继续判断,直接允许该用户访问。如果不等于则继续判断当前登录的用户名=="zhangsan"等于,则允许访问,不等于则接着向下,读取到了<deny users="*"/>这个配置,拒绝所有用户访问,跳转到LoginUrl指定的页面要求重新登录。
可是如果这样,只能实现目录一级的权限控制,如果要控制某个文件的访问权限,又该如何做呢?难道非得把这个文件放到一个文件夹中,然后再添加web.config进行控制么?答案是否定的,对于单个文件的访问控制,ASP.NET也有相应的配置:
<configuration>
<location path="a.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<system.web>
<authorization>
<allow users="admin"/>
<allow users="zhangsan"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
看上面这个配置,我们可以在<system.web>节点之上(必须是上面)再增加一个<location>节点,通过path属性指明location内的配置是单独针对哪个文件即可。具体内容我就不多说了,想必大家也都看得懂。不过需要注意的一点就是:location节点可以有多个。这意味着同一个目录下的不同文件可以有不同的访问权限。
好了,配置到这里算是完成一多半了。还有一个问题就是:如果我们的用户比较多,那么需要在配置文件中把这些用户全部罗列其中。并且以后添加了新用户,还得继续修改配置,太麻烦了!该怎么办呢?通用的做法就是引入角色的概念。给所有的用户分配一个角色,比如:users,admin等。然后我们只需要控制这些角色的访问权限即可。以后添加了新用户只需给这个新用户分配角色,而不用去修改配置,实在是方便。其实,membership也提供了角色的概念,只需要简单的配置一下就可以实现了。
要实现角色功能,非常简单,我们还是去machine.config的<system.web>节点下面找到<roleManager>节点,然后整个节点复制过来到web.config中去,一般会有两个<add>子结点,我们删除一个,留下一个就可以了。全部内容如下:
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
这个配置比较简单,各项配置和前面配置都一样,不再多说。稍微修改一下:
<roleManager enabled="true" defaultProvider="myAspNetSqlRoleProvider">
<providers>
<add name="myAspNetSqlRoleProvider"
connectionStringName="ConnectionString"
applicationName="TestMembership"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
注意:这个roleManager多了个属性enable="true",这是因为角色管理默认情况下是关闭的,所以我们必须得设置为开启才行。
相关文章推荐
- ASP.NET 下web.config Forms身份验证的配置
- Web.config配置内容中Asp.net 的身份验证问题
- ASP.NET 下web.config Forms身份验证的配置
- Web.Config 文件中的设置配置网页身份验证
- Forms验证在Web.config中的配置说明
- web.config 限定访问权限 Asp.net的身份验证有有三种
- web.config 关于froms 的身份验证基本原理
- fowms验证中配置web.config
- asp.net中的窗体身份验证(完整篇之附录:web.config中相应节点详解)
- web.config配置的验证级别
- 表单验证 web.config配置
- 具有身份验证的web.config
- fowms验证中配置web.config
- Web.Config文件配置之配置验证级别
- 具有身份验证的web.config
- 对文本框中密码加密,对web.config中字符串的加密,身份验证
- 在Asp.Net2.0中可以方便的访问配置文件web.config,如判断debug设置,验证类型等。
- IIS_Web网站发布配置_解除网络访问Windows身份验证限制
- Asp.net的登录验证方法Web.config访问权限配置
- 在Asp.Net2.0中可以方便的访问配置文件web.config,如判断debug设置,验证类型等