ASP.NET开发网站的身份验证通常使用两种办法:一种是Forms身份验证(authentication),这是典型的Internet应用,用户名及密码保存在数据库内(默认数据库名ASPNETDB.MDF);另外一种办法是Windows身份验证,这是ASP.NET默认的身份验证方式,这是典型的Intranet应用,它使用Windows网络域中有效的用户名及口令,包括组成员(一般在Active Directory内)来对用户进行身份验证。
如果网站放在一个局域网内,只允许局域网内的有效用户进行访问,使用Windows身份验证是一个好的选择。这时,网管只需要维护Windows系统用户,不需要额外维护网站的用户,因为可以通过对Windows系统用户进行维护,从而让Intranet网站使用Windows的系统用户进行登录。
在Internet(即Forms身份验证)中,开发人员需要创建一个Login页面,对用户名及密码进行身份验证(相应的用户名及密码在数据库内);在Intranet(即Windows身份验证)中,开发人员就不需要设计登录页面及登录逻辑,用户可以直接点击网站运行(前提是用户使用自己的Windows用户名及密码进入系统),开发人员可以根据用户名及其Group Membership判断用户是在哪一个组,从而对该用户进行授权。
由于是Windows身份验证,所以不允许任何没有Windows有效账号的用户访问,因此,需要对web.config文件进行适当的配置如下:
<configuration>
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
注意语句<deny users="?"/>中"?"指的是匿名用户,即本网站不允许任何匿名用户访问。
如果要获取用户名,可以使用如下代码:
string username = HttpContext.Current.User.Identity.Name;
如果获取用户组(即对应ASP.NET中Forms身份验证的角色),假设在Windows服务器的Active Directory中有用户组为Domain\Admin,则可以这样写:
if (User.IsInRole("Domain\Admin"))
Label1.Text = User.Identity.Name + " is an Admin";
else
Label1.Text = User.Identity.Name + " is not an Admin";
根据上面所述的办法,可以根据用户所在Group Membership(即Role),对用户进行授权管理
今天是注册博客园第一天,关于网站开发类的文章将从新浪博客迁移到本博客。