天天看點

ASP.NET MVC SSO單點登入設計與實作

127.0.0.1 app.com

127.0.0.1 sso.com

ASP.NET MVC SSO單點登入設計與實作

應用程式池采用.Net Framework 4.0

ASP.NET MVC SSO單點登入設計與實作

注意IIS綁定的域名,兩個完全不同域的域名。

ASP.NET MVC SSO單點登入設計與實作
ASP.NET MVC SSO單點登入設計與實作
ASP.NET MVC SSO單點登入設計與實作

 資料庫采用EntityFramework 6.0.0,首次運作會自動建立相應的資料庫和表結構。

在浏覽器位址欄中通路:http://app.com,如果使用者還未登陸則網站會自動重定向至:http://sso.com/passport,同時通過QueryString傳參數的方式将對應的AppKey應用辨別傳遞過來,運作截圖如下:

URL位址:http://sso.com/passport?appkey=670b14728ad9902aecba32e22fa4f6bd&username=

ASP.NET MVC SSO單點登入設計與實作

 輸入正确的登陸賬号和密碼後,點選登陸按鈕系統自動301重定向至應用會掉首頁,毀掉成功後如下所示:

ASP.NET MVC SSO單點登入設計與實作

 由于在不同的域下進行SSO授權登陸,是以采用QueryString方式傳回授權辨別。同域網站下可采用Cookie方式。由于301重定向請求是由浏覽器發送的,是以在如果授權辨別放入Handers中的話,浏覽器重定向的時候會丢失。重定向成功後,程式自動将授權辨別寫入到Cookie中,點選其他頁面位址時,URL位址欄中将不再會看到授權标示資訊。Cookie設定如下:

ASP.NET MVC SSO單點登入設計與實作

登陸成功後的後續授權驗證(通路其他需要授權通路的頁面):

校驗位址:http://sso.com/api/passport?sessionkey=xxxxxx&remark=xxxxxx

傳回結果:true,false

用戶端可以根據實際業務情況,選擇提示使用者授權已丢失,需要重新獲得授權。預設自動重定向至SSO登陸頁面,即:http://sso.com/passport?appkey=670b14728ad9902aecba32e22fa4f6bd&[email protected] 同時登陸頁面郵箱位址文本框會自定補全使用者的登陸賬号,使用者隻需輸入登陸密碼即可,授權成功後會話有效期自動延長一年時間。

使用者授權驗證日志:

ASP.NET MVC SSO單點登入設計與實作

使用者授權會話Session:

ASP.NET MVC SSO單點登入設計與實作

資料庫使用者賬号和應用資訊:

ASP.NET MVC SSO單點登入設計與實作

從草稿示例代碼中可以看到代碼性能上還有很多優化的地方,還有SSO應用授權登陸頁面的使用者賬号不存在、密碼錯誤等一系列的提示資訊等。在業務代碼運作基本正确的後期,可以考慮往更多的安全性層面優化,比如啟用AppSecret私鑰簽名驗證,IP範圍驗證,固定會話請求攻擊、SSO授權登陸界面的驗證碼、會話緩存自動重建、SSo伺服器、緩存的水準擴充等。

源碼位址:https://github.com/smartbooks/SmartSSO