[Security] 跨域登錄 - 如何在從一個域轉移到另一個域時自動登錄用戶


Answers

如果有人能夠在中間玩男人並抓住那個哈希,他們是否能夠竊取跨域轉移? 顯然,需要在需要使用它之前生成並發送給客戶端。 例如說:

我在扮演傑克的中間人。 Jack訪問domain1.com ,這會導致準備好哈希並發送給他,這樣當他訪問domain2.com他可以發送該哈希作為身份驗證。 當他訪問domain1.com ,他的請求來自我,你返回頁面,我抓住哈希並讓他繼續。 我使用哈希訪問domain2.com ,你現在讓我進入domain2.com並刪除哈希。 在他嘗試登錄domain2.com並被告知他的憑據不再有效之前,他並不聰明。

你是怎麼克服的?

Question

我們提供多種在線服務。 如果用戶從一個服務(在domain1.com )轉移到另一個服務(在domain2.com ),我們需要開發一個為用戶提供快速/簡單體驗的系統。

一旦他轉移到新服務後,是否有一種安全可靠的方式自動登錄用戶?

如果下面的解決方案完全不安全/錯誤,請對我大喊大叫。

我們正在考慮一個類似於許多在線服務提供的用於密碼恢復的系統 - 它們通過電子郵件發送一個帶有唯一哈希的鏈接,該鏈接過期,允許他們更改密碼。

domain1.com將生成唯一的哈希並將其存儲在數據庫中,其中哈希鏈接到用戶以及到期日期時間字段。

用戶將被轉移到domain2.com/auto/?hash=d41d8cd98f00b204e9800998ecf8427e

domain2.com接下來會使用哈希向domain1.com發出請求以獲取有關用戶的信息。 然後domain1.com將從數據庫中刪除哈希。 domain2.com會記錄用戶並設置cookie等。

可以基於OpenID或OAuth獲得相同的結果嗎?




這是一個很好的解決方案。 以下兩點需要考慮:

您使用術語“哈希”,但不清楚您將散列哪些數據。 相反,使用“nonce”:由加密質量RNG生成的大(128位)數字。

此外,您沒有指定此項,但用戶與兩個域之間以及域之間的通信必須是安全的。 使用SSL對服務器進行身份驗證並對nonce保密。




Links