ASP.NETwindows身份驗證詳細步驟-域驗證登陸

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

相關文章
相關標籤/搜索