V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gdtv
V2EX  ›  问与答

请教 CAS 单点登录系统 的问题

  •  
  •   gdtv · 2016-05-16 22:03:26 +08:00 · 1859 次点击
    这是一个创建于 2908 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们有 N 个使用 php 或者 java 开发的网站,在不同的子域名下。我们想实现在其中一个网站登录 /退出的时候,其他网站可以自动登录 /退出。
    于是我们找了这个东西: CAS 单点登录系统 http://zxs19861202.iteye.com/blog/855856

    有些疑问请教一下大家:
    1 、假设站点 app1.demo.com 上有个页面 app1.demo.com/show.php , 这个页面无论登录与否都可以访问,如果未登录则显示登录链接,如果已登录则显示用户信息。请问是否每次访问这个页面,客户端都必须后台调用服务器端进行检测用户的登录状态?
    2 、在站点 1 (即客户端 1 )登录后,站点 2 (即客户端 2 )如何得知登录状态? 服务器端会在后台向站点 2 通知登录状态吗? 还是说站点 2 在刷新页面的时候才能调用服务器端进行检测用户的登录状态?
    3 、同第 2 点类似,在站点 1注销后,站点 2 如何得知登录状态?
    13 条回复    2020-06-24 16:58:12 +08:00
    JiShuTui
        1
    JiShuTui  
       2016-05-16 22:20:52 +08:00
    建议先仔细学习一下单点登录的原理,你的疑问都能得到解答。
    Syc
        2
    Syc  
       2016-05-16 22:45:01 +08:00 via Android
    UCenter 走起
    markmx
        3
    markmx  
       2016-05-16 22:50:57 +08:00   ❤️ 1
    CAS 一般 适用与封闭系统 类似 SNS 之类的。
    论坛 等 一般可匿名浏览的不适用 CAS 。
    因为 A 站访问时 会拦截跳转到 CAS 进行密钥验证。在访问 B 站时,再次跳转到 CAS 上进行验证。
    如果想要让用户感觉不到跳转的过程 可能需要改造一下验证机制,异步进行登录验证 。
    9hills
        4
    9hills  
       2016-05-16 22:56:03 +08:00 via iPad
    匿名也可用 CAS ,没问题的,不强制要求登录即可。
    gdtv
        5
    gdtv  
    OP
       2016-05-16 23:26:17 +08:00
    @markmx 访问 A 站-->跳转到 CAS 验证-->跳转回 A 站,此时 A 站是已登录状态。 此时再访问 B 站, B 站需要跳转到 CAS 验证吗?如果不需要,那么 B 站如何获取登录状态?根据 session 或者 cookie ?
    501956430
        6
    501956430  
       2016-05-16 23:36:26 +08:00 via iPhone   ❤️ 1
    @gdtv a 登录成功后 cookie 中已经有 sessionid 这个事设置在根域名下的 再次访问拿 cookie 去登录的
    501956430
        7
    501956430  
       2016-05-16 23:38:31 +08:00 via iPhone
    @501956430 实际上还分装了加密的 token
    markmx
        8
    markmx  
       2016-05-17 09:28:53 +08:00   ❤️ 1
    @gdtv b 站 肯定要跳到 CAS 进行验证的 , 其实有 COOKIE 的就是 CAS,
    A 和 B 站 COOKIES都是根据CAS的 交换过来的数据进行生成的.
    其实同步登陆好做 至少有个触发点..同步退出 是个蛋疼的问题..
    上面说过 如果不想来回跳 可以做个异步 !
    gdtv
        9
    gdtv  
    OP
       2016-05-17 09:55:46 +08:00
    @501956430 a 登录成功后 cookie 中已经有 sessionid ,此时打开 B 的页面, B 可以直接得到登录状态吗?
    gdtv
        10
    gdtv  
    OP
       2016-05-17 10:03:12 +08:00
    @markmx 在 A 站已登录的情况下,我的系统现在就是 b 站要跳转一次到 CAS 进行验证,但是看网上的说明说 B 站不用跳转,直接就能获取到已登录状态。
    markmx
        11
    markmx  
       2016-05-17 10:21:40 +08:00   ❤️ 1
    肯定是需要跳转到CAS的. 记录COOKIES或者SESSION是浏览器的行为.服务器之间是无法做交换的.

    不想跳就  AJAX 过去一个页面过去..
    501956430
        12
    501956430  
       2016-05-18 20:49:22 +08:00 via iPhone
    @gdtv 这个时候实际上也是去登录了一次,只是你完全感觉不到
    Shikyou
        13
    Shikyou  
       2020-06-24 16:58:12 +08:00
    这一类实现单点登录的用户管理的云服务已经很多了,为什么还要自行开发呢?
    比如国内的 Authing,还有美国的 Auth0 和 AWS Cognito 都行的(国内由于政策原因用不了)。
    用了以后就回不去了,再也无需开发、运维用户系统。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2192 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:34 · PVG 23:34 · LAX 08:34 · JFK 11:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.