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

我先簡單的介紹一下我的需求。我希望我做的軟件中,可以與域控集成,實現單點登錄,且不需要額外輸入帳號祕密。當然這是在已經登陸到域的前提下。
    爲此我翻過很多資料。Windows 確實提供了 API 來操作登錄。但小弟比較愚笨,一直感覺這些 API 使用起來很笨拙。且根據系統需求,往往進行域控帳號認證,都是在服務器上進行的。因爲你的機器可能不能訪問到我的域控服務器。對於一般的 IT 服務器部署,域控服務器都是在一個安全區域裏面的。

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

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

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

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

    實現也很簡單,就從當前認證的用戶信息中獲取用戶的名字就可以了。

    然後,發佈這個服務,並在IIS 中設置賬戶的安全信息是集成 NT 域控認證,同時取消匿名訪問。

    這樣就可以,現在你只需要在你的應用中,在剛開始初始化的時候,調用一下這個WebServie, 如果獲取的賬號名不爲空,就表示賬戶已經在域控進行認證了。

    關鍵是,這個方法可以讓你在很多地方進行復用,使用也很簡單。不過前提必須是網絡應用。那種單機應用就不怎麼適合了。

 

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