.net 域用戶登錄

asp.net Web項目中c#讀取域用戶名的方法

 

最近在做一個BS的內部管理系統,因對方公司採用域管理,所以希望系統根據已登錄windows的域用戶自動登錄。

    爲了這個還真費了不少精力,因我公司沒有域服務器,所以臨時建了一個,(順便一提Windows Server 2003的域服務器可以隨時建立,不用跟Windows 2000一樣在安裝的選擇成域服務器,早知這樣我就不用格式化系統了,-_-|||)網上查了很多資料,再經實踐終於得出了一種方法,其實很多網上寫的方法都可以,但只是點了一下,有些地方說得不夠明白。

完成後做個總結備忘,以備後用:

(一)環境要求:IIS服務器必須在域中,應該是在域用戶下安裝的IIS,我有一臺電腦原先已裝有IIS,我直接把電腦加入域中用原有的IIS做服務器,發現不行,而且這時不能對IIS進行管理,雖然可以使用,但在訪問時會彈出登錄窗口,如果允許匿名又無法讀取到域用戶名了,結果就讀不出域用戶名了。

(二)系統設置:IIS設置爲“目錄安全性”中去掉“匿名”訪問,採用“集成windows身份認證”;.net系統中web.config中  

        <!--
            通過 <authentication> 節可以配置 ASP.NET 使用的 
            安全身份驗證模式,
            以標識傳入的用戶。 
        -->
  <authentication mode="Windows"/>

採用Windows論證方法。

(三)代碼:

User.Identity.Name;  //讀取域登錄用戶名,格式爲Domainname\username (域名名稱\用戶名稱)     

網上有人說可以用System.Environment.UserName;讀取用戶名,筆者發現本地可以,Web服務不行,域中也不行。

以下代碼可以讀取服務器所在域全稱: 

        IPHostEntry myHost = new IPHostEntry();
        myHost = Dns.GetHostByName(Dns.GetHostName());
        this.labHost.Text = myHost.HostName.ToString();
結果:server.domain.sobnb.com

(四)總結:域用戶訪問,所有環境必須都在域中進行,非域環境中Web服務器應該不是讀取客戶端的Windows用戶信息的(客戶端的Js代碼可以),應該說域中的用戶名讀取也是讀取了域服務器中的信息,而非客戶端的信息,不知道這樣認爲對不對?

    其實這個功能很有用,大家如果做BS的企業管理系統,搞個這個真不錯,首先是方便,不用登錄;第二是安全;第三便於管理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章