背景
客戶很早之前有一套完整的系統(tǒng)基本都是基于MicroSoft體系進(jìn)行開發(fā),比如Sqlserver數(shù)據(jù)庫(kù)福青、excel中調(diào)用vb程序?qū)崿F(xiàn)代碼邏輯祝谚,而其中的用戶鑒權(quán)次泽,用戶信息都是從AD域控中獲取只锻。后來開發(fā)了諸多的系統(tǒng)碴里,而我們的系統(tǒng)就是其中的一員羹膳。基于此形勢(shì)下,客戶要求如果當(dāng)前電腦用戶是域用戶登錄逼侦,無需輸入用戶名以及密碼晰赞,直接免登錄跳轉(zhuǎn)到系統(tǒng)首頁(yè)。
思路
思路首先要清晰,AD域中用戶是MicroSoft體系下內(nèi)容。所以思路必須從其體系內(nèi)入手。主要有以下兩種:
- IE ActiveX 插件
-
域控服務(wù)器IIS部署.net c# 程序
以下是經(jīng)過驗(yàn)證兩種方式的優(yōu)缺點(diǎn):
對(duì)比
IE ActiveX 模式
前端代碼:
<html>
<body>
<h1></h1>
<script>
var wshNetwork = new ActiveXObject("WScript.Network");
alert("域名 = "+ wshNetwork.UserDomain);
alert("計(jì)算機(jī)名 = "+ wshNetwork.ComputerName);
alert("登錄用戶名 = "+ wshNetwork.UserName);
</script>
</body>
</html>
設(shè)置ie瀏覽器選項(xiàng):
結(jié)果:
-
谷歌:不能直接用ActiveX插件痢站,js報(bào)錯(cuò),如果想調(diào)用ActiveX插件,可以通過安裝谷歌插件饭于,但是也不推薦,隨著版本的變化可能會(huì)出問題菱属。
谷歌驗(yàn)證 -
ie非域普通用戶登錄:可以獲取到主機(jī)名以及用戶名
ie非域普通用戶登錄 -
ie域用戶登錄:可以獲取到域和用戶
ie域用戶登錄
IIS服務(wù)模式
開發(fā).net c#程序缕溉,通過獲取“域\用戶”篱竭,與相關(guān)系統(tǒng)登錄鑒權(quán)對(duì)接忘分,實(shí)現(xiàn)無縫銜接拿愧。同時(shí)敷存,需要明確系統(tǒng)中登錄名是否與域中用戶名一致,如不是全部完全一致猖败,需建立映射關(guān)系领虹。
在主域控(可以嘗試在副域控)主機(jī)届宠,服務(wù)器管理器角色中安裝IIS服務(wù)赐写,并且將1中程序發(fā)布到IIS服務(wù)中返干,并且在“身份驗(yàn)證”中啟用“windows身份驗(yàn)證”,并且同時(shí)關(guān)閉其他所有的驗(yàn)證血淌。
在ie瀏覽器 設(shè)置-internet選項(xiàng)-安全-本地intranet-站點(diǎn)中,將2中部署的IIS地址加入到可信站點(diǎn)中(可以通過域進(jìn)行統(tǒng)一設(shè)置)
IIS服務(wù)開發(fā)部署示例
vs開發(fā)工具中程序開發(fā)
點(diǎn)擊Web.Config文件,確認(rèn)是否有該選項(xiàng) <authentication mode="Windows" />悠夯,如果沒有需要加入
添加一個(gè)web窗體癌淮,命名login
生成兩個(gè)比較重要的文件,一個(gè)是login.aspx,一個(gè)是login.cs沦补。一個(gè)對(duì)應(yīng)前臺(tái)乳蓄,一個(gè)對(duì)應(yīng)后臺(tái)。
打開login.cs文件進(jìn)行邏輯的書寫夕膀,大致如下:
protected void Page_Load(object sender, EventArgs e)
{
string name = base.User.Identity.Name;
string domainName = "YSAIN\\";
if (name.Contains(domainName))
{
string[] sArray = Regex.Split(name, @"\\", RegexOptions.IgnoreCase);
string userCode = sArray[1];
string url = "http://xxx:yyy/domainLogin?username=" + userCode;
Response.Redirect(url, true);
} else
{
// tiao
}
}
以下為實(shí)現(xiàn)的思路
- 根據(jù)base.User.Identity.Name獲取到當(dāng)前登錄的域控用戶虚倒,比如“YSAIN\zhangsan”
- 首先校驗(yàn)驗(yàn)證域名稱“YSAIN”與預(yù)定目標(biāo)名稱是否一致,之后截取用戶名“zhangsan”
- 通過調(diào)用HTTP/WS服務(wù)产舞,通過域用戶獲取到系統(tǒng)中對(duì)應(yīng)的用戶token憑證魂奥,這里需要注意失敗的邏輯
- 通過獲取到的token憑證,Redirect到前端頁(yè)面進(jìn)行免登錄易猫。
開發(fā)的流程到此告一段落耻煤。
IIS服務(wù)安裝
打開服務(wù)器管理器,在角色下右鍵准颓,點(diǎn)擊添加角色
直接下一步
選擇web 服務(wù)器(IIS)進(jìn)行安裝(圖中是已經(jīng)安裝過的)
然后哈蝇,要選擇IIS中有些必選的服務(wù)選項(xiàng)(這些在之后也可以進(jìn)行添加,這里我是安裝后的界面)攘已,圖中的插件必須選中:
然后直到安裝完成之后炮赦,角色下會(huì)出現(xiàn)
在開始菜單搜索”IIS”
打開IIS服務(wù)
部署IIS服務(wù)
IIS首頁(yè)點(diǎn)擊網(wǎng)站右鍵進(jìn)行添加新網(wǎng)站,注意填寫物理路徑(為程序部署的目錄)样勃,以及服務(wù)的端口號(hào)
點(diǎn)擊身份驗(yàn)證
禁用所有驗(yàn)證吠勘,然后單獨(dú)開啟windows身份驗(yàn)證
打開vs 2019, 點(diǎn)擊發(fā)布
選擇本地文件夾
點(diǎn)擊完成彤灶,然后到發(fā)布界面看幼,點(diǎn)擊發(fā)布
到之前設(shè)置的d:/vs2文件夾下可以看到
將所有文件copy到之前,IIS中設(shè)置的物理路徑文件夾中幌陕,如下
重啟該網(wǎng)站
加入可信站點(diǎn)
測(cè)試結(jié)果
-
登錄非域用戶情況
訪問之前部署好的頁(yè)面 http://172.16.1.149:8181/myapp.aspx
輸入域用戶以及密碼诵姜,直接跳轉(zhuǎn)到了 域用戶登錄的系統(tǒng)主頁(yè),截圖就不放上來了 登錄域用戶情況
訪問之前部署好的頁(yè)面 http://172.16.1.149:8181/myapp.aspx搏熄,直接跳轉(zhuǎn)到了 域用戶登錄的系統(tǒng)主頁(yè)棚唆,截圖就不放上來了