OAuth2与sso的结合思路

=======首次登录==================================
1、用户访问A系统,A系统检查自身的session(第三方系统概念,非统一认证中心概念),发现此人未登录,转到统一认证中心登录检查接口。
2、统一认证中心检查接口,判断下sso domain下是否存在 access_token,没有表示需要进行首次登录验证。
3、跳转到登录页面,要求输入用户名,密码,验证码。
4、验证通过后,
(1)为A系统生成一个授权码authorization_code
(2)根据authorization_code+clientId+clientSecret ---->生成 access_token
(3)将access_token写入sso domain 的cookie中

(4) 将authorization_code和access_token记录到redis中。
5、将授权码authorization_code通过ReturnUri跳转给A系统.
6、A系统获取到授权码后,通过post方式验证授权码(authorization_code+clientId+clientSecret ),sso首先到redis中查找authorization_code是否存在,存在则直接返回redis中的access_token值,否则验证是不是合法授权码,正确后,生成access_token返给A系统。
7、A系统确认authorization_code正确,并获取到access_token后,可以实现自己的内部逻辑,比如记录session等。
=================二次访问其它系统=====================
1、用户访问B系统,B系统根据自身的检查逻辑判断,发现此人没有登录,转到统一认证中心登录检查接口。
2、统一认证中心检查接口,判断下sso domain下是否存在 access_token,存在,表示已经在其它系统中登录过了。
3、
(1)为B系统生成一个授权码authorization_code
(2)根据authorization_code+clientId+clientSecret ---->生成 access_token

(3) 将authorization_code和access_token记录到redis中。
4、将授权码authorization_code通过ReturnUri跳转给B系统.
5、B系统获取到授权码后,通过post方式验证授权码(authorization_code+clientId+clientSecret ),sso首先到redis中查找authorization_code是否存在,存在则直接返回redis中的access_token值,否则验证是不是合法授权码,正确后,生成access_token返给B系统。
6、B系统确认authorization_code正确,并获取到access_token后,可以实现自己的内部逻辑,比如记录session等。
============================刷新token================================
1、在SSO中需要重写domain下的cookie值access_token.
2、

============================注销登录=================================
1、各系统通过类似于redis的方式,对于access_token进行保存,以后的内部程序的访问,不必到统一认证中心检查access_token的有效性。
2、提供退出接口,方便sso进行调用,统一实现退出逻辑。调用后,删除本地的redis中access_token

猜你喜欢

转载自www.cnblogs.com/littlehb/p/12451514.html
今日推荐