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身份認證