天天看點

C/S中利用域控進行SSO的簡單實作方式

我先簡單的介紹一下我的需求。我希望我做的軟體中,可以與域控內建,實作單點登入,且不需要額外輸入帳号秘密。當然這是在已經登陸到域的前提下。

為此我翻過很多資料。Windows 确實提供了 API 來操作登入。但小弟比較愚笨,一直感覺這些 API 使用起來很笨拙。且根據系統需求,往往進行域控帳号認證,都是在伺服器上進行的。因為你的機器可能不能通路到我的域控伺服器。對于一般的 IT 伺服器部署,域控伺服器都是在一個安全區域裡面的。

在此之前,我已經實作了一個WebService ,提供了一個 Login(UserName, Password) 的方法, Login 可以在域控上進行認證。但這個方法必須在用戶端自己做一個登陸窗體。

一次偶然的機會,我發現,如果在Webservice 的 IIS 上設定了 NT 內建使用者認證,那麼在非域環境中登陸的時候,是會自動彈出一個登陸密碼的框框的。其實這點我早就應該知道了,隻是以前都是在網頁中彈出的,沒想到在 C/S 環境中也會自動彈出,根據這一個發現,我設計了一個簡單的 SSO 登陸方式:

首先,實作一個Webservice ,我選用的 C# 實作的,微軟這點還是做得非常易用的。這個 Service ,隻需要提供一個方法:

  1. public string GetUserName() { return User.Identity.Isauthorized?User.Identity.Name:""; } 

實作也很簡單,就從目前認證的使用者資訊中擷取使用者的名字就可以了。

繼續閱讀