最近给公司内部某个部门做了个ASP.NET网站,需要用到Windows认证,用户访问网站的时候,输入的是AD里面的用户名和密码进行验证。原先IIS是这样设置的:
所以每次用户访问,IIS都会弹出一个页面让用户输入用户名和密码:
但是用户不喜欢上面这个页面,且用户需要把“记住我的密码”这个选项给去掉,所以我就打算使用asp.net的Form认证方式,自己写代码来验证
用户输入的用户名和密码是否正确。在网上搜了一下,微软有一篇文章介绍了Windows认证的实现方式:
http://msdn.microsoft.com/zh-cn/library/ms180890(VS.90).aspx
我照着文章中的步骤创建了相关的类和页面,在VS2008里面运行,可以正常进行用户验证,
但是当我把网站代码部署到IIS里面的时候,验证就通不过了,出现的错误页面如下:
查了好久,才发现自己在创建IIS的虚拟目录的时候漏了这两个步骤:
-
使应用程序的匿名帐户成为对 Active Directory 域服务具有权限的帐户。
-
如果启用了“允许 IIS 控制密码”复选框,则清除该复选框。默认的 IUSR_<computername> 帐户对 Active Directory 域服务不具有权限。
所以,IIS的匿名用户没有权限到AD里面去进行验证;然后我打开虚拟目录的属性页,进行如下设置:
然后就可以看到部署在IIS里面的网站能正常的进行windows用户验证了: