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


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

 

轉自:http://blog.sobnb.com/u/92/6150.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM