写过单点登陆的老哥有几个问题想请教一下。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dapengzhao
V2EX    问与答

写过单点登陆的老哥有几个问题想请教一下。

  •  
  •   dapengzhao 2019-12-12 14:16:27 +08:00 2594 次点击
    这是一个创建于 2131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景: 1.公司内部的几个系统需要把登陆弄成单点登陆。大概就是系统 A 登陆了,再去 B,C 也是登陆状态 2.网站都是用 django 写的 3.不同用户在不同网站的权限不统一

    看了 cas 的工作原理,大概明白了使用认证中心去统一管理的思路。但是也有几个问题 不同系统的注册和修改密码该怎么实现?因为不同的系统在不同的服务器上也有自己的用户表。 总结一下就是不知道这些系统的用户表应该在什么地方,怎么统一管理?

    10 条回复    2020-06-24 16:52:40 +08:00
    UG1u8zhQxhvqXNrk
        1
    UG1u8zhQxhvqXNrk  
       2019-12-12 14:37:32 +08:00
    最好把用户鉴权体系抽成一个系统,A,B,C 三个系统登录都会到 O 这个系统去鉴权,鉴完权后在分别在三个系统写一个 session 即可。
    biantaoGG
        2
    biantaoGG  
       2019-12-12 14:39:09 +08:00
    这不是单点登录吧......单点登录不是多设备登录会把之前设备上的给踢下线么...
    biantaoGG
        3
    biantaoGG  
       2019-12-12 14:40:13 +08:00
    @biantaoGG 好吧 我孤陋寡闻了...原来单点登录不是我想的这样
    cccy0
        4
    cccy0  
       2019-12-12 14:42:58 +08:00
    这不是单点登录啊, 这种可以先确定一个唯一的用户 id, 然后再把 session id 或者 jwt 统一管理起来
    tanranran
        5
    tanranran  
       2019-12-12 14:43:05 +08:00
    jwt 了解一下
    romisanic
        6
    romisanic  
       2019-12-12 14:43:26 +08:00
    既然都单点了
    用户的管理当然也要放一块去,注册、修改密码的地方都统一成一个啊
    各个业务系统没必要自己再去维护一套用户数据了
    crclz
        7
    crclz  
       2019-12-12 16:53:59 +08:00
    单点登录:
    用户想要凭借在 A 站点登记的的身份访问 B 站点,那么得先去 A 站点请求一个 token,建议用 JWT 形式 jwt.io
    拿到这个 token 后,用户将这个 token 给 B 站点。至于怎么给,可以是 A 站点跳转到 B 站点的同时附带一个 token 在 query 里面(?token=xxx ),或者 post 同时跳转到 B (不知道前端能不能跨域 post+跳转)。

    这个 token 附带该用户在 A 站点登记的信息,比如 id。B 站点用这个 id 来区分用户的身份。

    B 站点怎么确认这个 token 的合法性?因为这个 token 是用户传递给 B 的,所以会被伪造。所以 token 里面还要附带签名(这也是 jwt 的标准)。同时 B 也要有 A 的公钥。2) 也可以 B 向 A 发起查询,但是会有网络和磁盘开销。

    万一用户修改密码怎么办?一个解决方案是 A 在 token 里面加上过期时间(这也是 jwt 标准)。过期后,用户将 token 传递给 B,B 发现过期,所以让用户重新去 A 站点,重新输入密码,重新请求 token。
    还可以用 B 向 A 发起查询的方式,每个请求都查询一遍。或者当用户在 A 系统修改密码时,A 向 B 推送废除 token 的消息。这类设计的安全系数高,消除了不一致窗口(窗口长度<=token 过期时间),但是开发难度大,并且提高了系统的耦合程度。
    InkAndBanner
        8
    InkAndBanner  
       2019-12-12 17:22:03 +08:00
    感谢楼上 涨知识了
    ss0070
        9
    ss0070  
       2019-12-12 17:36:46 +08:00 via Android
    用户表集中到 cas 呗,如果想各个系统单配权限,那就同步用户表到各个系统进行权限配置,或者是 cas 返回信息的时候把集中权限返回给对应的系统
    Shikyou
        10
    Shikyou  
       2020-06-24 16:52:40 +08:00
    这一类实现单点登录的云服务已经很多了,为什么还要自行开发呢?
    比如国内的 Authing,还有美国的 Auth0 和 AWS Cognito 都行的(国内由于政策原因用不了)。
    用了以后就回不去了,再也无需开发、运维用户系统了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2734 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 12:12 PVG 20:12 LAX 05:12 JFK 08:12
    Do have faith in what you're doing.
    ubao 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