天天看點

.net core實踐系列之SSO-跨域實作

接着上篇的《.net core實踐系列之SSO-同域實作》,這次來聊聊SSO跨域的實作方式。這次雖說是.net core實踐,但是核心點使用jquery居多。

建議看這篇文章的朋友可以先看上篇《.net core實踐系列之SSO-同域實作》做一個SSO大概了解。

源碼位址:https://github.com/SkyChenSky/Core.SSO.git

.net core實踐系列之SSO-跨域實作

隻要統一Token的産生和校驗方式,無論授權與認證的在哪(認證系統或業務系統),也無論使用者資訊存儲在哪(浏覽器、伺服器),其實都可以實作單點登入的效果

Token的生成

Token的共享

Token校驗

同域

跨域

業務系統自認證

轉發給認證中心認證

所有支援JavaScript 的浏覽器,都必須遵守的安全政策,也是浏覽器最基本的安全功能。

如果沒有處理過發起跨域請求,就算伺服器接收到了,響應成功了浏覽器也是會攔截的。

<dl><dd></dd></dl>

指域名,協定,端口相同

浏覽器為了阻止惡意腳本擷取不同源上的的敏感資訊。

然而在實際情況下跨域請求的場景也是存在的,解決方案有兩種:

JSONP

響應頭設定“Access-Control-Allow-Origin”

Cookie的讀取和發送也是必須遵循同源政策的。

雖說請求共享可以設定響應頭Access-Control-Allow-Credentials、Access-Control-Allow-Origin與Ajax請求屬性xhrFields: {withCredentials: true}進行解決,但是!

就算響應頭有set-cookie浏覽器也是無法正常儲存的。

針對cookie認證,我唯一能找到的解決方案就是跳轉頁面。

具體步驟:

認證中心登入成功後,請求登入中心接口獲得token

攜帶token逐個跳轉到業務系統的中轉頁面。

跳轉完成後,傳回到認證中心登入頁面進行引導。

 PS:如果哪位朋友有更加好的方案,可以及時與我溝通,非常感謝

與同域的實作的方式一緻。

生成與認證是一對的,與之對應的就是AES的加密與解密。

業務系統自主認證的方式,對于系統的代碼複用率與維護性都很低。如果想進行轉發到認證系統進行認證,可以對[Authorize]進行重寫。

大緻思路是:

通路業務系統時,由自定義的[Authorize]進行攔截

擷取到Token設定到請求頭進行HttpPost到認證系統提供的/api/token/Authentication接口

響應給業務系統如果是成功則繼續通路,如果是失敗則401或者跳轉到登入頁。

最近事情比較多,demo與文章寫的比較倉促,如果朋友們有更好的實作方式與建議,麻煩在下面評論回報給我,先在此感謝。

作  者:

陳珙

出  處:http://www.cnblogs.com/skychen1218/

關于作者:專注于微軟平台的項目開發。如有問題或建議,請多多賜教!

版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。

聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!