采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
各个系统的接口的每一次调用都需要调用单点登录鉴权逻辑吗
这里就要分为有状态和无状态登录两种情况了。
有状态登录:服务器会记录session。
当用户访问系统A的时候,系统A会直接把用户重定向到系统C(单点登录系统)。这时候系统C会检查用户的session,
如果用户还没登录,没有session,那么系统C会马上让用户进行登录,当用户成功登录后,系统C就会给用户颁发一个session,并把用户重定向回系统A,并告诉系统A“该用户已登录,可以打开网页了”
如果用户已经登录过,有session,那么系统C会检查一下session是否合法。如果合法,系统C就会直接把用户重定向会到系统A,并告诉系统A“用户已登陆,可以打开网页了”;如果不合法(如过期),那么用户就要重新登录。
例子,比如说商业单点登录系统 ForgeRock (https://www.forgerock.com/), 它提供了以上全部的解决方案,专门用于处理多个系统间用户授权验证的调度,同时也自动支持集群部署。
无状态登录,jwt token保存在前端,这种情况比较简单,系统C(单点登录系统)不需要再做那么复杂的重定向了。当用户访问系统A的时候,请求的头部或cookie需要携带jwt,
如果没有,系统A直接就可以使用系统C提供的api做登录(登录ui可以由系统A独立处理,我们只需要调用系统C的api就可以了)。
如果有jwt,系统A可以使用系统c提供的jwt验证api来校验用户是否合法。合法的话就放行,不合法就登录。
对于第二点,在校验用户的时候还有一个更简单的方法,就是把jwt的私钥分别保存在系统A和系统B中,由他们自己去处理用户校验信息(jwt校验过程课程中有详细讲解)。这样,用户验证过程就可以完全不需要系统C的参与。但是要注意保管好私钥。
以上介绍的是最简单的单点登录的处理方式,更复杂的还有如OAtuh、SAML等协议。如课程所说无论是有状态登录还是无状态登录都各有利弊,至于你的系统选择该如何选择完全取决于业务需求。
学生系统A,图书系统B,单点登录系统C。
因为ABC都是独立部署的一套系统,那在用户访问A或者B的接口时如何鉴权呢?因为权限和授权都是在C中完成获取的,在访问A或者B系统接口时是否要通过系统A或者B再次调用C完成鉴权过程呢?
请看上边的回复
不太明白你的问题,可不可以详细描述一下?最好能举个例子,谢谢。
学生系统A,图书系统B,单点登录系统C。 因为ABC都是独立部署的一套系统,那在用户访问A或者B的接口时如何鉴权呢?因为权限和授权都是在C中完成获取的,在访问A或者B系统接口时是否要通过系统A或者B再次调用C完成鉴权过程呢?
登录后可查看更多问答,登录/注册
. Net Core实战+RESTful思想纵深课程,开发优雅RESTful风格API。
178 2
321 2
457 1
748 2
1.1k 3