2011-06-14 69 views
3

我在www.domain.com上設置了一個站點,該站點可以對用戶進行身份驗證並將其憑據保存在Cookie中。跨不同子域(但不是全部)進行身份驗證

有時用戶訪問在不同子域上的不同服務器上設置的處理程序。 handlers.domain.com

我不能使用通配符子域的cookies(曲奇不應該適用於其他子域)

我訪問控制解決了到現在爲止是用於handlers.domain.com每個URL有一個GUID具體到用戶。其他站點上的處理程序將假定該GUID所有者的身份。這當然不是一個很好的安全措施。

我考慮的替代方案:以handlers.domain.com所有鏈接竟然會被鏈接到www.domain.com一個重定向腳本,將重定向到腳踩handlers.domain.com URL加密的時間,那麼這將肯定知道它是作爲直接訪問從www.domain.com認證重定向。 此解決方案在GET場景下工作正常,但會遇到預期POST數據的處理程序失敗(上傳大文件)

有誰知道或可以想到更好的解決方案或對我的解決方案有任何洞察?

(在這種情況下,我使用ASP.NET但解決的辦法很可能是平臺無關的,所以我會用不同的網絡平臺標籤這個)

謝謝!

回答

1

由於您不想使用cookie建立會話(請求組),您需要找到其他方法。由於cookie的信息在HTTP請求中可讀,所以如果您針對該特定請求將該信息作爲POST請求的一部分傳遞,我不會看到問題。

如果您更喜歡GET請求,我還會在重定向之前在用戶服務器端會話內添加一個標誌,以便爲重定向的目的地提供腳本以驗證請求在服務器上的有效性-側。

+0

我確實建立了一個會話,但只在第一個子域上。也許,現在這是一個純ASP.NET問題,我可以通過POST請求發佈sessionId,並在其他域中「加入」會話(我使用中央數據庫會話管理),但我不確定這可以是但在ASP.NET – Variant 2011-06-14 13:05:04

+0

中完成您可能必須重寫默認會話模塊才能完成此操作,但這可能是可行的。 – jdc 2011-06-14 13:10:44

+0

會議只是在我的回答中用作廣義術語。例如,您可以將該標誌放入數據庫,然後從另一臺服務器上的數據庫中查詢該標誌,而不管使用何種類型的「會話模塊」。只傳遞數據服務器端來驗證請求是否有效。如果您使用密碼術,您將共享密鑰服務器端。但是使用密碼學,你需要知道你在做什麼以及如果祕密密鑰被篡改或丟失了怎麼辦。通過「會話」(兩臺服務器之間的共享存儲),每個請求都會有一個「祕密」。 – hakre 2011-06-14 13:19:27

0

你說你「不能使用通配符子域Cookie(Cookie不應該可用於其他子域)」。這是否意味着您無法用金錢購買或者您不希望用戶訪問所有子域名?如果是第二個,那麼您仍然可以使用子域Cookie,方法是將該用戶的ID加入一個加密值,並在不同子域上檢查它與訪問權限。這樣可以將所有服務器都保存在更安全的服務器上,而不是在URL級別。潛在的黑客通過它的唯一方法是猜測另一個用戶的ID並找出您的密鑰以正確加密它。

+0

我爲每個子域名每個cookie支付10美元的費用,所以它變得相當昂貴...(開玩笑) – Variant 2011-06-14 12:58:26

+0

我不想使用通配域cookie的原因是因爲其他子域服務器的分段,開發和演示版本該網站,我不希望餅乾混合。 – Variant 2011-06-14 12:59:22