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

真正的跨域单点登录是怎样的? cas 有人在用吗?

  •  
  •   heeeeeem · 2021-10-14 00:31:56 +08:00 · 3246 次点击
    这是一个创建于 1115 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我看到的单点登录都是通过子域名共享 cookie 实现的, 跨域单点登录我只见过淘宝天猫,是通过第三方 cookie 实现

    我想知道 cas 真的能用吗?有具体的网站用到吗?
    假如有 A.comB.com 两个网站,我在先 A.com 登录了,
    然后去到 B.com ,在 B.com 一个页面中有个签到功能是需要登录的,
    而签到的页面有一个弹框显示相关签到信息,并有一个签到按钮,
    这时点签到需要带上当前页面的 url 去 sso 服务器认证,
    经过 cas 一番操作认证成功回到这个 B.com ,那就等于刷新了当前页面,我刚点开的签到页面岂不就关闭了,
    也就是虽然我通过 cas 登录了 B.com ,但我之前在 B.com 打开的弹框会消失,我还得再点一次签到,不能做到无缝连接

    也可能是我理解不对,想知道大家是怎么做的,有没有 cas 的网站或案例可供参考

    14 条回复    2022-01-29 18:47:05 +08:00
    eason1874
        1
    eason1874  
       2021-10-14 01:06:01 +08:00
    禁用第三方 cookie 的浏览器内在 b 域名引入 a 域名资源是不带 a 本来的 cookie 的,只能用跳转的办法

    登录跳转前可以暂存用户操作,跳转回来了自动恢复,比如在 storage 记下“签到”这个动作,回调了就触发签到

    也可以打开新 tab 登录,通过 postMessage 或者 storage listener 同步登录状态到原窗口
    acrisliu
        2
    acrisliu  
       2021-10-14 01:21:46 +08:00 via iPhone
    同一楼,跳转前记录当前状态,跳转回来后恢复状态。
    nvkou
        3
    nvkou  
       2021-10-14 01:25:41 +08:00 via iPhone
    Sso 知道:你成功登陆的账号,你账号的权限,你成功登陆的 ip 。 那么甲网站只需要带上挑战让你的浏览器去一下 sso 。Sso 就知道你令牌过期没有,有没有权限登陆甲,甲是不是可信域名。判断后再回来甲,甲验证签名和挑战即可登陆用户。 也就是说证明你是你是在 Sso 完成,甲只需要知道 Sso 是说真话就行了。 至于让乙自动登陆也是这么个流程,前提是用户在 Sso 上的登陆还没过期。对于用户来说无非就是浏览器有 2 次跳转
    binux
        4
    binux  
       2021-10-14 01:44:47 +08:00 via Android
    点签到的时候再弹一个窗去认证不就好了
    binsys
        5
    binsys  
       2021-10-14 08:44:24 +08:00
    CAS 应用很广,起码在教育系统。
    xuanbg
        6
    xuanbg  
       2021-10-14 09:10:16 +08:00
    只要 AB 使用同一个认证服务器颁发的 token 就能实现单点登录。
    dzdh
        7
    dzdh  
       2021-10-14 09:36:36 +08:00
    想要无缝那就页面插入 cas 的 js 吧

    比如
    cas.user().then(user=>{ local.checkin.check(user.id) })

    cas.user() 在当前 domain 下没 cookie 自动弹出登录窗口,登录窗口连接 cas,cas 已登录自动完成授权执行下一流程
    twinsdestiny
        8
    twinsdestiny  
       2021-10-14 12:09:33 +08:00
    单点登录后要保持页面不变,需要应用自己实现的
    sharkwan
        9
    sharkwan  
       2021-10-14 15:32:59 +08:00
    进到 B.com 点击签到,只是访问了一个接口,,,这个接口可能带入了一些需要认证的信息,,,接口返回,也大概率是 json 数据,,页面只是渲染这个 json 数据,,不会刷新页面的
    heeeeeem
        10
    heeeeeem  
    OP
       2021-10-14 16:16:55 +08:00
    @sharkwan cas 又不是只用请求一次,还需要几次地址栏重定向的
    sharkwan
        11
    sharkwan  
       2021-10-14 17:34:37 +08:00
    @heeeeeem 请求一次认证登录成功,B 就已经 set-cookie
    heeeeeem
        12
    heeeeeem  
    OP
       2021-10-14 17:42:58 +08:00
    @sharkwan 签到请求发到 B.com 的后台,后台让浏览器重定向到 SSO.com ,签到这个请求就已经完成了,并没有 json 返回来
    wqtacc
        13
    wqtacc  
       2021-10-14 21:20:25 +08:00
    如果不用 Oauth2 做这件事,Java 中用的非常多的一个也没说需要同域

    https://www.apereo.org/projects/cas
    norristong2
        14
    norristong2  
       2022-01-29 18:47:05 +08:00
    跟域名没有太大相关性,“直接将用户的信息返回,而是返回一个授权码 code ,再使用 code 在业务后端换取 Access token ,再用 Access token 获取用户信息。成熟、正规的业务系统产品都会支持标准协议,使用标准协议对接可以一劳永逸地完成对接。标准协议的推荐度:OIDC > SAML2 > CAS 1.0 > LDAP > OAuth2.0 。”

    可以看看这个 https://docs.authing.cn/v2/guides/sso/


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