use*_*048 24 cookies dns single-sign-on
我不明白谷歌如何实现以下单点登录机制:
第二个站点如何检测到我已经登录.它们是不同的域.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重定向.
可以使用中间域在域之间共享Cookie和localStorage。在主页上嵌入了一个“ iframe”,它可以访问cookie并将消息发送到主窗口。
mail.google.com并youtube.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进行单点登录的实现
据我记得,如果我没记错的话,cookies包含一个指定的字段,其中包含可以读取和获取此类cookie的域。这样做是为了防止某些网站读取您的所有 cookie 列表并为您自己做生意。您应该能够看到哪些类型的网站可以“查看”您的 Gmail cookie。
如果我错了,请纠正我,这应该编译有关 SID 和 gmail-YouTube 示例的答案。
| 归档时间: |
|
| 查看次数: |
9212 次 |
| 最近记录: |