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的企業管理系統,搞個這個真不錯,首先是方便,不用登錄;第二是安全;第三便於管理