2016-11-10 120 views
6

我已閱讀了幾篇關於sso的文章,但在我的腦海中找不到答案。 我有一種情況如下圖所示:使用JWT的單點登錄(SSO)

場景:

  • 我公司希望有使用JWT SSO機制。
  • 公司有2個不同的結構域等abc.comABCxyz.comXYZ
  • 還有一個masterdomain管理客戶端身份驗證。
  • 用戶X想要先登錄abc
  • ABC發送憑據masterdomainmasterdomain用戶進行身份驗證,然後才能返回給ABC創建簽名JWT。
  • abc將此jwt保存在cookie中。
  • 經過一段時間,如果在同一臺計算機上嘗試登錄abc,系統不會要求提供憑據並自動登錄該用戶。

問:

如果用戶試圖在XYZ域打開一個頁面,系統怎樣理解用戶的loggedIn過嗎?我的意思是xyz域名無法到達abc的cookie,它有jwt。什麼信息應該發送到xyz這表明用戶X正在嘗試登錄?

在此先感謝

回答

3

可以/連接到主頁的中間域的localStorage的使用iframe

cross domain sso

方案

存儲在cookie中智威湯遜認證令牌
  • abc發送憑證到masterdomainmasterdomain驗證用戶然後創建一個簽名的jwt爲了發送回abc。

  • abcmasterdomain將此jwt保存在cookie中。

  • 如果登錄ABC試圖在同一臺計算機上一段時間後,系統不要求提供信用憑證,並自動登錄用戶。

最後,當用戶在第二域中進入XYZ,JWT是從masterdomain存儲使用的IFRAME回收,並且自動登錄用戶

CORS不是問題,因爲masterdomain.com有權訪問其存儲和iframe之間的通信是允許的,如果起源和目的地被識別(見http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage

爲了簡化開發,我們最近發佈了一個開源項目跨域SSO與智威湯遜https://github.com/Aralink/ssojwt

+0

怎麼樣的安全,如果有一個釣魚網站,用戶輸入,用戶將失去訪問令牌? ** ssojwt **糾正這種情況? – Vunb

+1

@Vunb,iframe'postmessage'函數要求必須事先授權源站點和目標站點,否則瀏覽器將不允許消息傳遞,因此攻擊者不能訪問共享令牌,因爲它不在白名單中 – pedrofb