自动cookie单点登录多个域 - 如谷歌

use*_*048 24 cookies dns single-sign-on

我不明白谷歌如何实现以下单点登录机制:

  1. 我以gmail登录为例(我想这会在我的授权下创建一个cookie)
  2. 我打开一个新标签并直接输入"youtube"的网址
  3. 然后我输入youtube登录.

第二个站点如何检测到我已经登录.它们是不同的域.Youtube无法读取Gmail的Cookie.

我读过的关于单点登录的所有解决方案都不允许这样做.客户端始终要求获得中央登录应用程序的权限.在我的示例中,YouTube不知道我是登录Gmail的用户(实际上它确实知道,但我不明白如何)

请注意,我手动输入"youtube"的网址.我没有从gmail的上方工具栏中取出youtube图标(在这种情况下,gmail可能会通过网址传递一些auth params).

K3r*_*l31 12

Cookie在特定域上设置.例如:

setcookie(name,value,expire,path,domain) 
Run Code Online (Sandbox Code Playgroud)

当您在"mail.google.com"之前登录gmail时,您已被重定向到"accounts.google.com",然后重定向到"mail.google.com",因此Cookie也位于"accounts.google.com"上.

在这种情况下,域名为"accounts.google.com",路径为"/"(主路径).

当您请求"www.youtube.com"时,请点击"连接",它会快速请求"accounts.google.com",这样您就无法看到此重定向,并检查"accounts.google.com"上是否有Cookie.如果是,它会检查cookie是否有效且未过期,或者用户未被禁止...然后它会将您重定向到"www.youtube.com/signin?loginthisSession=Sessionid".此请求包含从"accounts.google.com"的Cookie中捕获的sessionid cookie的值.

在最后一步中,"www.youtube.com"会在域"www.youtube.com"上记录并设置自己的cookie并保存它们.

所以诀窍在于302 HTTP重定向.


ped*_*ofb 5

可以使用中间域在域之间共享Cookie和localStorage。在主页上嵌入了一个“ iframe”,它可以访问cookie并将消息发送到主窗口。

mail.google.comyoutube.com可以使用共享Cookie accounts.google.es。打开Chrome->Inspect->Resources->Local storage,您将在accounts.google.com身份验证令牌中看到JWT格式。

我已经详细说明了此答案中的技术步骤:https : //stackoverflow.com/a/37565692/6371459。还可以查看https://github.com/Aralink/ssojwt,以了解在中央域中使用JWT进行单点登录的实现

  • 请注意,添加 iframe 以在域之间共享 cookie 称为“第 3 方 cookie”,并且在新浏览器中已过时,请检查:https://blog.chromium.org/2020/01/building-more-private-web -path-towards.html (2认同)

LMG*_*LMG 0

据我记得,如果我没记错的话,cookies包含一个指定的字段,其中包含可以读取和获取此类cookie的域。这样做是为了防止某些网站读取您的所有 cookie 列表并为您自己做生意。您应该能够看到哪些类型的网站可以“查看”您的 Gmail cookie。

如果我错了,请纠正我,这应该编译有关 SID 和 gmail-YouTube 示例的答案。