2017-02-14 71 views
6

我試圖在PHP中爲兩個主題連接的域創建一個簡單的SSO系統。用於跨域身份驗證的JWT令牌

所以我想知道是否有可能將包含域A的用戶名的簽名JWT令牌存儲到本地存儲。然後使用來自域B的相同祕密密鑰驗證JWT,這將導致成功的身份驗證。

我搜索谷歌的一些答案,我發現其中一些包含一箇中間身份驗證域,這將負責身份驗證。但我想只是將我擁有的兩個域名鏈接起來。

謝謝。

回答

2

跨源數據存儲訪問不被same-origin policy

訪問存儲在瀏覽器如localStorage的和索引資料數據允許通過原點分開。 每個來源都有自己的獨立存儲空間,並且一個來源的JavaScript無法讀取或寫入屬於其他來源的存儲。

通常的解決方案是爲具有用於認證的中心結構域(可能是A或B),並用重定向發送JWT或S 域之間工作野兔橫跨使用iframe域認證令牌。查看詳情here

的OpenID,OAuth的和SAML協議可與重定向,例如谷歌網頁套房擁有自己的應用程序連接槽內部框架(谷歌另外一個是OpenID的連接提供商)

+0

的iFrame的偉大工程!謝謝! – Ales

0

沒有理由不能做到這一點。智威湯遜並沒有什麼特別之處,它僅僅是一個令牌,就像會話ID令牌一樣。 JWT和任何其他令牌的區別在於它可以包含數據的有效載荷。

您所描述的實質上是OAuth 2.0的密碼許可。您的SSO系統是授權服務器,可以對用戶進行身份驗證併爲其提供訪問令牌。在這種情況下,訪問令牌實際上也可以是JWT。用戶(資源開發者)可以使用他們的訪問令牌訪問資源服務器(您的其他相關域),那些資源服務器可以驗證訪問令牌是否有效並允許或拒絕請求。

我在PHP中使用OAuth 2.0時使用以下庫:https://oauth2.thephpleague.com/ - 文檔中也有一些很好的信息。從域B至域A