2012-06-11 68 views
5

我不知道是否有可能在另一個域下而不是我目前的應用程序域名獲取Cookie?跨域cookie 3 Rails 3

我正在構建一個訪問另一個網站的API的應用程序。如果用戶已經從其他網站登錄,我的瀏覽器將在該域名下創建一個cookie。例如,用戶在www.example.com下登錄,我的瀏覽器將在www.example.com域下存儲一個cookie: cookies['token']。當用戶訪問我的網站www.mywebsite.com時,如何在我的Rails服務器中的www.example.com下獲取cookies?

任何幫助是非常感謝。

+2

基本上:你不能。具有域的cookie的要點是瀏覽器只發送屬於當前域的cookie。換句話說,如果您確實找到一種方法來讀取不屬於您的域名的cookie,您就會發現一個安全漏洞。 – Flambino

+0

是的,我一直在Google上搜索幾天,我發現許多答案與您完全相同。非常感謝你的回答。 –

回答

4

這可以完成,但它需要客戶端,您的網站和您的其他網站一起工作。你有一個知道如何對站點A進行身份驗證的客戶端。它希望查看站點B,因爲他知道如何使用站點A進行身份驗證。完成此操作的基本方法是讓客戶聯繫站點A進行身份驗證,從站點A獲取站點B可以信任的令牌,然後將該令牌交給站點B.

實際上,您希望構建非常具體的OpenID或OAuth案例。這當然是可能的,但是您需要對www.example.com進行一些更改才能使其發揮作用。如果你能夠做到這一點,太棒了。

首先閱讀有關OAuth的所有內容。您不需要完全使用(儘管您可以),但它有助於解釋您需要執行的操作:http://hueniverse.com/oauth/

+0

爲此,我是否需要同時打開網站?或從站點1到站點2的鏈接? –

+0

後者。您需要有效鏈接這些網站。想象一下,如果站點A是像LiveJournal這樣的站點,而站點B是像堆棧溢出那樣的站點。您可以使用LiveJournal帳戶登錄到Stack Overflow,這與我建議您解決此問題的方式非常相似。想象一下,您在網站B上單擊「登錄」。它會將您重定向到網站A.網站A驗證您的身份驗證cookie,然後將您重定向到網站B,幷包含一個簽名的「將此用戶作爲用戶X身份驗證」參數。站點B識別該身份驗證並將您登錄到站點B.他們一起工作。 –

+0

是的,我明白你的意思。它被稱爲'OpenID',但我的問題是網站A不提供這種服務,但它有它自己的登錄屏幕。當用戶訪問站點A時,瀏覽器將創建一個cookie,並且當用戶訪問站點B時,我希望站點B訪問站點A中創建的cookie。可以這樣做嗎? –

1

您可以跨域的不同子域共享Cookie,但不能跨多個域名共享Cookie 。

Cookie由BROWSER存儲,瀏覽器不允許您從外部域名訪問或存儲cookie。如果瀏覽器確實允許你這樣做,那將是一個巨大的安全缺陷。

但是,您可以共享存儲在服務器上的域名之間的會話數據。這可能不是微不足道的,但由於會話信息存儲在SERVER上,因此如果需要,您可以在應用程序之間訪問服務器上的信息。如果您的會話數據存儲在數據庫中,那麼只需將數據庫訪問權限授予這兩個域。如果需要,您可以將數據庫實際打開到外部域名,並讓外部域直接連接到服務器上的數據庫。