Cookies 自动cookie单点登录多个域-如google
我不明白谷歌是如何实现以下单点登录机制的:Cookies 自动cookie单点登录多个域-如google,cookies,dns,single-sign-on,Cookies,Dns,Single Sign On,我不明白谷歌是如何实现以下单点登录机制的: 例如,我登录了gmail(我想这会在我的授权下创建一个cookie) 我打开一个新标签,直接键入“youtube”的url 然后我进入youtube登录 第二个站点如何检测到我已经登录。 它们是不同的领域。Youtube无法读取Gmail的cookie 我读过的关于单点登录的所有解决方案都不允许这样做。客户端始终请求对中心登录应用程序的权限。 在我的例子中,YouTube不知道我是登录Gmail的同一个用户(实际上它知道,但我不明白怎么做) 请注意,我
请注意,我手动键入“youtube”的url。我不会从gmail的上工具栏点击youtube图标(例如,在这种情况下,gmail可能会通过url传递一些身份验证参数)。据我所知,如果我没有记错的话,cookie包含一个指定字段,其中包含可以读取和获取此类cookie的域。这样做是为了防止某些网站阅读您的所有cookie列表,并创建您自己的业务。你应该能够看到哪种网站可以“看到”你的gmail cookie
如果我错了,请纠正我的错误,这将编译有关SID和gmail YouTube示例的答案。cookies设置在特定域上。例:
setcookie(name,value,expire,path,domain)
当你登录gmail时,在“mail.google.com”之前,你已经被重定向到“accounts.google.com”,然后再重定向到“mail.google.com”,所以cookies也在“accounts.google.com”上
在本例中,域是“accounts.google.com”,路径是“/”(主路径)
当你请求“www.youtube.com”时,你点击它请求的“连接”
“accounts.google.com”速度很快,因此您无法看到此重定向,并检查“accounts.google.com”上是否有cookie。如果是这样,它会检查cookie是否有效且未过期,或者用户是否未被禁止。。。然后它会将您重定向到“www.youtube.com/sign?loginthisSession=Sessionid”。此请求包含从“accounts.google.com”的cookie中捕获的sessionid cookie的值
在最后一步,“www.youtube.com”会记录您的日志,并在域“www.youtube.com”上设置自己的cookie并保存它们
所以诀窍在于302 HTTP重定向。看看这个。
本文包括SSO跨域的说明和示例 可以使用中间域在域之间共享Cookie和localStorage。主页上嵌入了一个“iframe”,它访问cookie并向主服务器发送消息
mail.google.com
和youtube.com
可以使用accounts.google.es
共享cookies。打开Chrome->Inspect->Resources->Local storag
e,您将在accounts.google.com
中看到JWT格式的身份验证令牌
我已经在这个回答中详细介绍了技术步骤:。还看一看在中心域中使用JWT实现单点登录在评估这个跨域SSO主题时,我提出了一个可能的新SSO同步流,使用带有时间戳的cookie。尽管它不是Goog使用的流le,我认为这个流程可以在域数量有限的系统中实现 此流不使用
第三方cookie
这将是一篇很长的帖子:)
领域
举个例子,假设我们的示例宠物论坛有以下域名:
- (用于SSO登录)
- .domain1.com(例如)
- .domain2.com(例如)
- .domain3.com(例如)
- 添加和,将两个主机名通信路由到托管服务器
dog.domain2.com
,用户尚未登录dog.domain2.com
account.domain1.com
登录
- 此步骤可以是任何登录协议、OAuth、OIDC、SAML、CAS等
- 所以,重要的是用户登录后被重定向回原来的页面
- 这么说吧
如URL中所示,以便在登录成功后返回重定向\u uri
.domains2.com
域上设置cookie(稍后将详细介绍cookie值).domains3.com
域上设置cookie.domains1.com
域上设置cookie- cookie的内容应允许任何网页查看,并确定是否需要SSO同步
- 可以存储不同类型的cookie内容,包括
- 布尔值表示用户是否登录
- 用户ID
- 过期时间戳
- 存储
有用户登录名
=true/false有同步问题
- 假设
登录、访问、用户A
注销和用户A
登录用户B
- 现在,从这个角度来看,不需要同步
- 但是,存储的是
,而不是用户A
,因此存在同步问题用户B
- 尽管将
存储在这些cookie上,让所有域都能看到它们,并相应地设置用户,这很有诱惑力。user\u id
- 这太危险了,因为cookie是在父域设置的
- 如果任何一个网站在y下