2012-07-11 28 views
18

我不明白谷歌是如何實現單點登錄的以下機制:自動cookie的單點登錄 - 像谷歌

  1. 我在Gmail例如登錄(我想這將創建一個cookie withmy授權)
  2. 我打開一個新標籤和直下式「YouTube」的視頻的URL
  3. 然後我輸入YouTube登錄。

第二個網站怎樣才能檢測到我已經登錄。 他們是不同的領域。 Youtube無法讀取Gmail的Cookie。

我讀過關於單點登錄的所有解決方案都不允許這樣做。客戶端總是要求獲得中央登錄應用程序的許可。 在我的示例中,YouTube不知道我是用戶登錄Gmail(實際上它確實知道,但我不知道如何)

請注意,我手動輸入「youtube」的url。我不會從gmail的上部工具欄中點擊youtube圖標(在這種情況下,gmail可能會通過url傳遞一些auth參數)。

+0

也許答案是在這個SO問題? http://stackoverflow.com/questions/44509/single-sign-on-across-multiple-domains – mxro 2012-10-23 01:58:27

+1

你能找出他們是如何做到這一點的?我很難過,因爲我一直在看螢火蟲,如果我在'google.com'上登錄,則'youtube.com'永遠不會重定向到'sso.google.com'。它不知何故魔法般地知道你已登錄。 – F21 2013-11-29 10:48:09

+0

你覺得它是如何工作的? – chanchal118 2016-06-01 05:05:01

回答

0

據我所知,如果我沒有錯,cookies包含一個指定的字段,其中包含可讀取和獲取此類cookie的域。這是爲了防止某些網站讀取您的所有cookie列表並創建自己的業務。您應該能夠看到哪種類型的網站可以「查看」您的Gmail郵件cookie。

糾正我,如果我錯了,這應該編譯關於SID和Gmail,YouTube的例子給出了答案..

5

的Cookie是在spesific域EX設置:

setcookie(name,value,expire,path,domain) 

whene你向登錄到Gmail中,mail.google.com之前,你已經被重定向到accounts.google.com時再到mail.google.com,這樣的餅乾是在「accounts.google.com」太

in this case the domain is : accounts.google.com 
the path is : "/" 'this is the home path 

當你要求www.youtube.com然後你點擊'connexion',它請求 accounts.google.com快,所以你不能看到這個重定向,並檢查你是否有如果是這樣,它檢查cookie是否有效,沒有過期或不被用戶禁止或...然後將您重定向到www.youtube.com/signin?loginthisSession=Sessionid「這一要求countains的會話ID的Cookie從accounts.google.com

最後一步的餅乾擦肩而過值」 www.youtube.com'您登錄並設置域「自身的Cookie www.youtube.com '並保存他們

所以訣竅是在302 http重定向

+1

重定向如何在沒有我們在Firebug上看到的情況下實現? – chanchal118 2016-06-01 05:06:31

+0

它是如何實際工作的?將會話ID包含在URL中通常被認爲是不安全的(如果使用HTTPS,則__ is加密,但可以由服務器,代理,瀏覽器歷史記錄或HTTP引用標頭泄露)。 – SilverlightFox 2016-06-02 09:39:51

+0

@ chanchal118 請睜開你的眼睛在這個截圖或只是通過做代理/是HttpFox,你會看到 http://i.imgur.com/aDIcYJb.png – K3rnel31 2016-06-02 18:01:26

3

可以使用中間域在域之間共享Cookie和localStorage。在主頁上嵌入了一個「iframe」,它訪問cookie並將消息發送到主。

mail.google.comyoutube.com可以使用accounts.google.es共享cookie。打開Chrome->Inspect->Resources->Local storag e,您將在accounts.google.com中看到JWT格式的身份驗證令牌。

我已經詳細解答了這個問題的技術步驟:https://stackoverflow.com/a/37565692/6371459。也看看https://github.com/Aralink/ssojwt看在中央域使用JWT的單點登錄的實施