V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
x2420390517
V2EX  ›  程序员

请教登录相关问题

  •  
  •   x2420390517 · 108 天前 · 1815 次点击
    这是一个创建于 108 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在浏览器窗口中打开 jd.com ,并登录 我在新标签页中打开 jdl.com ,发现可以自动登录 请问实现原理是什么,是判断设备的指纹 ID 嘛,还是别的?

    45 条回复    2024-03-28 13:42:06 +08:00
    mightybruce
        1
    mightybruce  
       108 天前
    你是不是前端程序员啊,这个想法也只有前端才会这么认为

    这就是基本的 SSO (单点登录), 10 年前就有的技术。
    zuixinwenyue
        2
    zuixinwenyue  
       108 天前
    1 楼说的对
    thxgod
        3
    thxgod  
       108 天前
    cookie 吧
    body007
        4
    body007  
       108 天前


    这里的 localStorage 貌似关闭浏览器程序再打开都还在呢,更别说新建标签页。
    sentinelK
        5
    sentinelK  
       108 天前   ❤️ 8
    楼上这都回答的什么……

    楼主的问题是:如何实现跨域单点登录。

    然后一楼回答:这是单点登录,笨蛋。
    三楼四楼:同域可以通过 cookie 或者 storage 哟。

    v2ex 的水平已经下降到这种程度了么……
    x2420390517
        6
    x2420390517  
    OP
       108 天前
    @body007 请问你 jdl.com 怎么获取 jd.com 的本地数据?你是不是没有明白我说什么
    Zeroo07
        7
    Zeroo07  
       108 天前
    1l 正解吧,他这两个站点域名不一样
    qinrui
        8
    qinrui  
       108 天前
    jdl.com 只要向 jd.com 发一个请求,就可以知道当前账户的登录状态了吧
    body007
        9
    body007  
       108 天前
    @x2420390517 额额,我理解错了。。不过我在 V2EX 页面查看到其他网站的数据。

    x2420390517
        10
    x2420390517  
    OP
       108 天前
    @qinrui jdl.com 新打开的时候,什么信息都没有,他用什么去询问 jd.com ,我是这个有疑问
    x2420390517
        11
    x2420390517  
    OP
       108 天前
    @mightybruce 我确实是前端程序员,我也听过单点登录。但是我有点疑惑就是,jdl.com 新打开的时候,他什么都没有,单点登录系统怎么认证他的,这里不理解,所以才提问的
    sentinelK
        12
    sentinelK  
       108 天前   ❤️ 1
    跨域单点登录可以参考以下内容:
    https://juejin.cn/post/6844903862743089165

    简单而言,跨域单点登录唯一需要注意的,就是要“安全”的把 A 站点的状态(可以是 token ,可以是 sessionID 、ticket 等等),同步到 B 站点。
    vcbal
        13
    vcbal  
       108 天前
    SSO 的话 有好几种实现方式,我就说个笨方法,有个总站的概念
    mightybruce
        14
    mightybruce  
       108 天前
    sentinelK 真是个大聪明, 拿着其他家的单点登录说京东也是这样做的,就你牛逼
    x2420390517
        15
    x2420390517  
    OP
       108 天前
    @body007 #9 哥,这是控制台,你当然能看到
    x2420390517
        16
    x2420390517  
    OP
       108 天前
    @mightybruce #14 哥,别激动🥰
    mightybruce
        17
    mightybruce  
       108 天前   ❤️ 1
    单点登录 SSO 想做好并不容易, 基本这个在大厂一做就要好几年以上,这个每家实现都不一定一样了。
    你可以看看相关 RFC 标准

    https://datatracker.ietf.org/doc/html/rfc7642
    @x2420390517
    c3de3f21
        18
    c3de3f21  
       108 天前
    如果单靠设备指纹就可以做状态管理,我想不到那该有多爽卧槽~~~
    c3de3f21
        19
    c3de3f21  
       108 天前
    @c3de3f21 想想都爽,就像是扔了一坨鼻涕
    andyskaura
        20
    andyskaura  
       108 天前   ❤️ 1
    就是单点登录, 在登录页面登录成功后会向所有的域发起 set-cookie 请求,
    最终 set-cookie
    Belmode
        21
    Belmode  
       108 天前   ❤️ 1
    京东主站
    jd.com 的认证域是 https://passport.jd.com
    账号密码、手机号登录都是走此域。

    京东物流
    jdl.com 的认证域是 https://sso.jdl.com

    jdl.com 点击页面的登录按钮会调用请求 https://sso.jdl.com/sso/login?from=jdlwl_pc&ReturnUrl=https://www.jdl.com/
    这个请求会将信息转发到 https://passport.jd.com/new/login.aspx?sso=1&from=jdlwl_pc&ReturnUrl=https://sso.jdl.com/sso/redirect
    然后在 jd.com 的认证域认证完成后,通过回调的 url 返回 jdl.com

    这就是传统的 SSO 单点登录,借助 passport.jd.com 的 cookie 或者 stoarge 配合回调 url ,完成跨域认证。
    BiChengfei
        22
    BiChengfei  
       108 天前   ❤️ 1
    jd.com 登录后,访问 jdl.com ,先判断 jdl.com 中是否登录,未登录则重定向至 jd.com?redirect=jdl.comjd.com 中再进行重定向 jdl.com?token=xxxxx ,。这样 jdl.com 就获取到了用户的登录信息,就可以自动登录了
    12 楼说的对,SSO 就是如何把 A 域名下的数据安全拿到 B 域名下
    luzemin
        23
    luzemin  
       108 天前
    关键词:跨域单点登录 Cross-Domain Single Sign-On (CDSSO)
    看看相关资料应该不难理解,另外#20 楼都贴图了
    vczyh
        24
    vczyh  
       108 天前
    有一个站点负责认证:sso.com

    1. 应用 A (a.com) 收到请求会调用 sso.com 验证其中的 token ,如果不通过就跳转到 sso.com?redirect=a.com 登录。

    2. 登录之后将 token 保存到 sso.com 域下,然后跳转到 a.com?token=xx ,此时应用 A 可以保存 token 。

    3. 应用 B (b.com) 收到请求后调用 sso.com 验证 token ,如果通过跳转到 b.com ,如果不通过跳转到 sso.com?redirect=b.com 就可以拿到 token (第 2 步),然后跳转到 b.com?token=xx ,B 将 token 保存起来。

    通过 sso.com 将 A 的 token 保存到 B 下。
    param
        25
    param  
       108 天前 via Android
    新版 firefox 默认的安全选项已经隔离了每个域的 cookies ,上次调了很久走不通,发现是 firefox 默认隔离了。如果是基于此方法实现的单点登录,在 firefox 上应该想不通,楼主可以在 firefox 上试下?
    这样要做单点登录适配的话,只能做重定向的方式。
    param
        26
    param  
       108 天前 via Android
    https://cloud.tencent.com/developer/article/1616222
    浏览器完全禁用了第三方 cookies ,就无法做到了。只能用重定向的方式。
    x2420390517
        27
    x2420390517  
    OP
       107 天前
    @c3de3f21 #18 肯定有设备指纹这个信息
    x2420390517
        28
    x2420390517  
    OP
       107 天前
    @andyskaura 平时都是用的 token ,set-cookie 操作,假设 jdl.com 没有打开,能成功设置嘛
    x2420390517
        29
    x2420390517  
    OP
       107 天前
    @Belmode 大致过程明白了,但是请求会传什么信息呢,passport.jd.com 怎么知道这个请求是谁的
    x2420390517
        30
    x2420390517  
    OP
       107 天前
    @BiChengfei 你要不要去体验下,你看看 jdl 没登录,打开之后有没有重定向的过程
    x2420390517
        31
    x2420390517  
    OP
       107 天前
    @param #26 重定向页面不是应该会有跳转,打开 jdl 的页面,直接就显示登录了
    zsdroid
        32
    zsdroid  
       107 天前
    @sentinelK #11 那你有回答了什么?这么双标。
    param
        33
    param  
       107 天前
    @x2420390517 #31 可能因为你用的是 chrome ,还没完全禁止第三方 Cookie ,所以不需要跳转就能做到跨域通讯了。
    x2420390517
        34
    x2420390517  
    OP
       107 天前
    @param #33 刚刚用火狐试了,不用跳转也可以登录,版本是 122.0
    sentinelK
        35
    sentinelK  
       107 天前
    @zsdroid 如果你有比我更多的信息可以分享(比如为什么 JDL 没有重定向导致的闪屏问题),大可拿出来说。而不要在这里放空炮。

    我回答的时候,楼主没有说他了解的知识范围,也没有表达他具体的技术细节疑问,那我肯定是从零介绍。
    看故事不要倒着看。

    btw:使用对 cookie 限制最严格的 firefox ,jd 和 jdl 之间是不能实现 sso 的。也就是说,他并没有重定向,代价就是在限制严格的浏览器不能 sso 。
    sentinelK
        36
    sentinelK  
       107 天前
    @x2420390517 “刚刚用火狐试了,不用跳转也可以登录,版本是 122.0”

    这个测试结果和我的不一致,我的 firefox 版本号:124.0.1,目前看京东的 sso 是失效的。
    x2420390517
        37
    x2420390517  
    OP
       107 天前
    @sentinelK #36 我刚刚升级了版本,还是可以🤣🤣
    BiChengfei
        38
    BiChengfei  
       107 天前
    @x2420390517 “SSO 就是如何把 A 域名下的数据安全拿到 B 域名下”,这才是重点啊,大家也只是简单写一下理论方案
    AItsuki
        39
    AItsuki  
       107 天前
    这帖子看的我都生气了 12L ,26L 都给出答案了,你还搁那你的 firefox 可以。连设置和清理都不会么
    param
        40
    param  
       107 天前
    @x2420390517 #37 检查下你的 firefox 设置,检查下你的跨域请求带不带 cookies
    param
        41
    param  
       107 天前   ❤️ 1
    我刚刚试了一下 firefox 的「标准」限制级别,确实是可以的。看来我还没搞清它的隔离规则。在某下情况下才会被隔离。
    andyskaura
        42
    andyskaura  
       107 天前
    @x2420390517 #28 通过控制台查看,最终就是从 jd.com 发起了 sso.jdl.com 的 setcookie 操作,没有打开 jdl.com ,中间的过程也许很曲折。
    x2420390517
        43
    x2420390517  
    OP
       107 天前
    @andyskaura #42 非常感谢
    x2420390517
        44
    x2420390517  
    OP
       107 天前
    @AItsuki 生气你就别看,如果你知道原理,我可以说出来,你也可以不说,但是没必要在这里阴阳怪气的,我并没有问你!!!还有你自己看看楼下的回复
    param
        45
    param  
       107 天前
    @Belmode #21
    @andyskaura #42
    奇怪的是,jd.comsso.jdl.com 发请求触发的 setcookie 操作,是可以在 jdl.com 下共享读取到的。
    而我自己在 firefox 下怎么试都是被隔离的。


    京东的 SET-COOKIE 在 firefox 之下看到是大写的,我自己去模拟这一状况,set-cookie 都是小写显示的。
    不知道是我缺少哪一步,还是说京东有什么黑魔法。他可以做到我不可以。

    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 19:17 · PVG 03:17 · LAX 12:17 · JFK 15:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.