请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多个系统间单点登录各个系统接口如何鉴权呢

各个系统的接口的每一次调用都需要调用单点登录鉴权逻辑吗

正在回答 回答被采纳积分+3

3回答

阿莱克斯刘 2020-07-21 16:19:34

这里就要分为有状态和无状态登录两种情况了。

  1. 有状态登录:服务器会记录session。

    当用户访问系统A的时候,系统A会直接把用户重定向到系统C(单点登录系统)。这时候系统C会检查用户的session,

    1. 如果用户还没登录,没有session,那么系统C会马上让用户进行登录,当用户成功登录后,系统C就会给用户颁发一个session,并把用户重定向回系统A,并告诉系统A“该用户已登录,可以打开网页了”

    2. 如果用户已经登录过,有session,那么系统C会检查一下session是否合法。如果合法,系统C就会直接把用户重定向会到系统A,并告诉系统A“用户已登陆,可以打开网页了”;如果不合法(如过期),那么用户就要重新登录。

    3. 例子,比如说商业单点登录系统 ForgeRock (https://www.forgerock.com/), 它提供了以上全部的解决方案,专门用于处理多个系统间用户授权验证的调度,同时也自动支持集群部署。

  2. 无状态登录,jwt token保存在前端,这种情况比较简单,系统C(单点登录系统)不需要再做那么复杂的重定向了。当用户访问系统A的时候,请求的头部或cookie需要携带jwt,

    1. 如果没有,系统A直接就可以使用系统C提供的api做登录(登录ui可以由系统A独立处理,我们只需要调用系统C的api就可以了)。

    2. 如果有jwt,系统A可以使用系统c提供的jwt验证api来校验用户是否合法。合法的话就放行,不合法就登录。

    3. 对于第二点,在校验用户的时候还有一个更简单的方法,就是把jwt的私钥分别保存在系统A和系统B中,由他们自己去处理用户校验信息(jwt校验过程课程中有详细讲解)。这样,用户验证过程就可以完全不需要系统C的参与。但是要注意保管好私钥。


以上介绍的是最简单的单点登录的处理方式,更复杂的还有如OAtuh、SAML等协议。如课程所说无论是有状态登录还是无状态登录都各有利弊,至于你的系统选择该如何选择完全取决于业务需求。




0 回复 有任何疑惑可以回复我~
提问者 weixin_精慕门4159663 2020-07-21 09:02:21

学生系统A,图书系统B,单点登录系统C。

因为ABC都是独立部署的一套系统,那在用户访问A或者B的接口时如何鉴权呢?因为权限和授权都是在C中完成获取的,在访问A或者B系统接口时是否要通过系统A或者B再次调用C完成鉴权过程呢?

0 回复 有任何疑惑可以回复我~
阿莱克斯刘 2020-07-21 08:14:11

不太明白你的问题,可不可以详细描述一下?最好能举个例子,谢谢。

0 回复 有任何疑惑可以回复我~
  • 学生系统A,图书系统B,单点登录系统C。
    
    因为ABC都是独立部署的一套系统,那在用户访问A或者B的接口时如何鉴权呢?因为权限和授权都是在C中完成获取的,在访问A或者B系统接口时是否要通过系统A或者B再次调用C完成鉴权过程呢?
    回复 有任何疑惑可以回复我~ 2020-07-21 11:41:30
  • 请看上边的回复
    回复 有任何疑惑可以回复我~ 2020-07-21 16:20:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信