V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
heeeeeem
V2EX  ›  程序员

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

  •  
  •   heeeeeem · Oct 14, 2021 · 4180 views
    This topic created in 1660 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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


    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2448 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 04:57 · PVG 12:57 · LAX 21:57 · JFK 00:57
    ♥ Do have faith in what you're doing.