使用 CAS 实现 SSO 的相关问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Mrkon
V2EX    程序员

使用 CAS 实现 SSO 的相关问题

  •  
      Mrkon 2020-07-06 17:24:34 +08:00 2609 次点击
    这是一个创建于 1998 天前的主题,其中的信息可能已经有所发展或是发生改变。

    CAS 实现 SSO 至少有三个服务,分别是: 1.sso 站点 2.app1 站点 3.app2 站点

    我需要实现的是: 浏览器访问 app1 站点,在 app1 未登录的情况下重定向到 sso 站点.当 sso 站点也没有登录时,跳转回 app1 站点.

    我遇到的疑惑是: 当 sso 站点跳转回 app1 站点时,如何保证 app1 未登录的情况下不再跳转到 sso 站点.以免产生循环跳转.

    感谢大家的解答.

    15 条回复    2020-07-08 11:38:26 +08:00
    wangkai123
        1
    wangkai123  
       2020-07-06 17:32:32 +08:00
    1.“当 sso 站点也没有登录时,跳转回 app1 站点.” 这个需求有点奇怪

    2.当你已经实现了跳转回 app1 的逻辑,那可以写一个和第一次在浏览器访问 app1 不一样的 url 来避免循环跳转
    lslqtz
        2
    lslqtz  
       2020-07-06 17:50:32 +08:00
    看 referer 啊
    Mrkon
        3
    Mrkon  
    OP
       2020-07-06 17:50:45 +08:00
    @wangkai123 是可以选择不一样的 url 但是当 sso 站点又登录了,那么刷新 app1 就不会跳转到 sso 站点,也就不会登录了.

    关于需求,其实是需要在主页面(例如:http://www.baidu.com)就获取登录信息.像这些站点他们是怎么实现的单点登录呢?他们也没有跳转到登录页面啊?
    Mrkon
        4
    Mrkon  
    OP
       2020-07-06 17:56:12 +08:00
    @lslqtz referer 就是主页面,一般是 index.html 吧.但是跳转到这个页面又会根据用户未登录跳转到 sso 站点.
    lslqtz
        5
    lslqtz  
       2020-07-06 19:29:34 +08:00
    @Mrkon sso 跳回来的 ref 是 sso 的 ref,据此判断是否为重复跳转
    aegisho
        6
    aegisho  
       2020-07-06 20:09:04 +08:00
    app 站点的后端在 CAS 登录成功之后,需要存储对应的 session
    下次重新进入 app 站点时,是通过对应的后端 session 判断的。

    app -> app 后端 session 存在。
    app -> app 后端 session 不存在 -> 302 CAS 登录 -> 跳转 app,设置 session 。
    whileFalse
        7
    whileFalse  
       2020-07-06 20:58:07 +08:00
    app1 检查状态,发现是 {},于是跳转到 sso 。
    sso 把状态设置为 {"user": null},跳回 app1 。
    Mrkon
        8
    Mrkon  
    OP
       2020-07-07 11:15:22 +08:00
    @lslqtz 我使用的是 flask,不知道 ref 为什么一直是 None.所以根据思路直接设置在 cookies 里面了.
    Mrkon
        9
    Mrkon  
    OP
       2020-07-07 11:19:20 +08:00
    @whileFalse 这样的话,还是需要跳转 sso 检查状态吧?

    如果不检查,sso 登录了之后,app1 就不能获取登录状态了.
    Mrkon
        10
    Mrkon  
    OP
       2020-07-07 11:21:20 +08:00
    @aegisho 感谢回答,但是我的疑问是:
    app 后端 session 不存在 -> 不需要登录 -> 跳转回 app

    就像我们打开百度一样,未登录的时候,不会停留到在登录界面吧.
    whileFalse
        11
    whileFalse  
       2020-07-07 11:56:58 +08:00
    @Mrkon 可以搞定。sso 在用户登录时使用一个中间页面,该中间页面通过 iframe 或其他方式一口气把 app1 、app2 、app3 的登录状态全部写入,再跳回 app1 。
    aegisho
        12
    aegisho  
       2020-07-07 16:30:12 +08:00
    @Mrkon

    区分两个 session,app 的 session 和应用的 session

    更详细版本
    app -> app 后端 session 不存在 -> 302 CAS 服务 -> CAS 未登录输出登录页面 -> 用户登录 -> 跳转 app,设置 session 。

    app -> app 后端 session 不存在 -> 302 CAS 服务 -> CAS 已登录跳转 app,设置 session 。

    为什么你看不到登录页面,是因为在 app 跳转 cas 之后,cas 立刻跳转回了应用。
    你仔细看下 network 跳转过程,是可以发现有多次跳转的
    Mrkon
        13
    Mrkon  
    OP
       2020-07-08 09:33:40 +08:00
    @whileFalse 感谢,明白你的意思了.但是正是不做 iframe 才会这样,不然就可以直接通过 iframe 实现跨域了.
    Mrkon
        14
    Mrkon  
    OP
       2020-07-08 09:36:29 +08:00
    @aegisho 可能是我没有描述清楚
    在这个步骤中

    app -> app 后端 session 不存在 -> 302 CAS 服务 -> CAS 未登录输出登录页面 -> 用户登录 -> 跳转 app,设置 session

    我需要修改为

    app -> app 后端 session 不存在 -> 302 CAS 服务 -> CAS 未登录 -> 跳转回 app
    目前我通过设置 cookies 状态做到了
    whileFalse
        15
    whileFalse  
       2020-07-08 11:38:26 +08:00
    @Mrkon iframe 里面打开 app1 的“set session”页面啊。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4110 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 01:00 PVG 09:00 LAX 17:00 JFK 20:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86