2016-02-24 11 views
0

我有一個正在運行的服務器,說foo.com使用自己的私人數據庫進行身份驗證,我有另一臺服務器x.foo.com,以獲得foo.com cookie信息。跨兩個子域的身份驗證用戶沒有一個通用的auth服務器 - 2

現在我希望只有當用戶登錄到foo.com時,才能將用戶認證到x.foo.com。我們沒有oauth服務器,我也不想從x.foo訪問foo。

如果沒有普通的AUTH服務器並且兩臺服務器之間沒有任何交互,是否有任何方法實現SSO?

回答

1

爲了避免兩臺服務器之間的交互,您需要將所有用戶信息x.foo.com的需求放入cookie中,並添加一個簽名,以便x.foo.com可以驗證用戶是否沒有「 t改變cookie的內容。

foo.com和x.foo.com必須配置相同的密碼令牌。

E.g.用戶信息可能如下所示:user-info = "<user-id>:<username>:<login-time>"

要創建一個簽名,可以使用散列算法SHA-1一樣,signature = sha1("<user-info><secret-key>")

以及Cookie設置爲"<user-info>:<signature>"

x.foo.com然後可以採取user-info部分,從相同的方式生成簽名,並驗證簽名匹配。

用戶仍然可以讀取cookie的內容,但不能修改它,因此它們不能僞造登錄名。確保你有一個時間戳,並檢查它是相當新的,所以攻擊者不能使用舊的cookie來訪問x.foo.com。

如果用戶信息包含祕密信息,那麼你也應該加密內容。