Windows身份验证相比于form身份验证要方便的多,并且会有更好的安全保障。html
我我的以为windows身份验证写法有两种:web
第一种非代码方式进行windows身份验证;数据库
第二种是用代码访问活动目录,并获取活动目录(用户信息数据库)里的用户名,windows
可是第二种方式在有些状况下,不太安全!安全
第一种方式使用步骤以下:服务器
1:须要在web.config设置:dom
<authentication mode="Windows" />
2:获取用户名:网站
HttpContext.Current.User.Identity.Name; spa
注意:这里的用户名实际是"计算机名\账户名",就是从Active Directory中获取用户的登陆名.net
3:发布网站:
在发布网站时,将IIS配置中的“身份验证”中的“windows身份验证”开启,同时将“匿名身份验证”禁用
4:完成
第二种方式使用步骤,跟第一种方式差很少,可是须要使用代码来访问活动目录。
一般使用LDAP协议来访问Active Directory, 在.net framework中提供了DirectoryEntry和DirectorySearcher这二个类型让咱们能够方便地从托管代码中访问 Active Directory 域服务。
代码以下:
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domainName);
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(samaccountname=" + loginName + ")";
foreach( string p in properties )
search.PropertiesToLoad.Add(p);
SearchResult result = search.FindOne();
if( result != null ) {
foreach( string p in properties ) {
ResultPropertyValueCollection collection = result.Properties[p];
for( int i = 0; i < collection.Count; i++ )
Console.WriteLine(p + ": " + collection[i]);
}
}
在实际开发中遇到的问题
1:在获取用户名,无论用什么用户名登陆,只能获取同一个用户名。
缘由:客户的域服务器跟部署网站的服务器不是同一个服务,并且域服务器只分配给部署网站的服务器一个用户名,用来登陆域服务器,
因此在获取的时候只能获取这个用户名 。
因为网上讲解windows身份验证原理的已经不少,本文只讲解具体使用步骤,能力有限,欢迎斧正。
另外原理推荐你们浏览:细说ASP.NET Windows身份认证