[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對服務器進行身份驗證,並保留現時的機密性。