(三)、基于Spring Security OAuth2 实现 implicit + jwt 方式的单点登录


更多相关文章请见:Spring Security文章目录


1、简介

某些场景下 单点登录系统sso 和 应用系统sso-client直接网络无法联通,可以考虑直接使用implicit方式的oauth2 + jwt 进行实现。

实现目标:

  1. 多应用系统单点登录功能(一次登录,访问多个系统,默认通过sso会话实现登录保持,集群环境可以考虑将session也转成token)。
  2. 应用系统 token 鉴权访问,一个token,可以访问所有应用系统资源。

注:authorization_code 方式,多了code换取token步骤,需要应用系统能够访问到单点登录系统。

1.1、oauth2 简介:

需要注意几个角色:

  • 授权系统:发放token的系统,就是我们的sso。
  • 资源系统(应用系统):使用token校验权限的系统,就是我们的sso-client。
  • 用户:页面操作人,持有用户名、密码。

五种场景

  • authorization_code:授权码类型,授权系统针对登录用户下发code,应用系统拿着code去授权系统换取token。
  • implicit:隐式授权类型。authorization_code的简化类型,授权系统针对登录系统直接下发token,302 跳转到应用系统url。
  • password:资源所有者(即用户)密码类型。应用系统采集到用户名密码,调用授权系统获取token。
  • client_credentials:客户端凭据(客户端ID以及Key)类型。没有用户参与,应用系统单纯的使用授权系统分配的凭证访问授权系统。
  • refresh_token:通过授权获得的刷新令牌 来获取 新的令牌。

1.1、implicit 简单介绍

参考: RFC规范
流程图如下:

 +----------+
 | Resource |
 |  Owner   |
 |          |
 +----------+
      ^
      |
     (B)
 +----|-----+          Client Identifier     +---------------+
 |         -+----(A)-- & Redirection URI --->|               |
 |  User-   |                                | Authorization |
 |  Agent  -|----(B)-- User authenticates -->|     Server    |
 |          |                                |               |
 |          |<---(C)--- Redirection URI ----<|               |
 |          |          with Access Token     +---------------+
 |          |            in Fragment
 |          |                                +---------------+
 |          |----(D)--- Redirection URI ---->|   Web-Hosted  |
 |          |          without Fragment      |     Client    |
 |          |                                |    Resource   |
 |     (F)  |<---(E)------- Script ---------<|               |
 |          |                                +---------------+
 +-|--------+
   |    |
  (A)  (G) Access Token
   |    |
   ^    v
 +---------+
 |         |
 |  Client |
 |         |
 +---------+

简要说明:

  • Resource Owner:用户,用户名、密码持有人。
  • User-Agent:可以简要理解为浏览器。
  • Client:资源调用请求发起方,对于我们的demo来说,发起请求的浏览器就是客户端。
  • Authorization Server:授权系统,包含用户名密码采集和验证。
  • Web-Hosted Client Resource:资源系统,提供受保护的资源。

所以,对于我们来说,实际流程大体为:
在这里插入图片描述

其中 sso的 登录判断 和 上一步的url 默认都是通过session来实现的,如果想要集群化,可以将这两步改造成外部缓存(如 redis),或者交给客户端保持(如:jwt 生成 token 存放在 cookie )。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值