一、应用场景
承接上文(二)spring security:使用 OAuth2 SSO 实现单点登录。
二、步骤分解
0.客户端注册授权服务器
后续的 debug步骤,我就不再贴图了。太多了。可以在源码分析图中,梳理 oAuth2整个授权与认证流程。
1.访问受保护的资源 URI
http://localhost:8083/orderSystem/order/list
2.授权端点(自动跳转,显示登录页)
http://localhost:8080/oauth/authorize?client_id=OrderManagement&redirect_uri=http://localhost:8083/orderSystem/login&response_type=code&state=2uBjsM
3.授权码(登录成功后,自动跳转)
http://localhost:8083/orderSystem/login?code=IdP6LA&state=2uBjsM
4.jwt令牌(自动跳转,静默请求,访问成功)
post: http://localhost:8080/oauth/token
header: Authorization: Basic xxxxxxxxxxxxxxxxxxx
#参数
grant_type=authorization_code
code=IdP6LA
redirect_uri=http://localhost:8083/orderSystem/login
client_id=order123
注意:这个请求中唯一需要注意的一个 header参数就是Authorization= Basic xxxXXX,这是用于认证客户端的。
三、源码分析
- oauth2源码分析-client端启动注册接入SSO
- oauth2源码分析-授权码访问与JWT令牌
图片太大太长,只能截断了,(*/ω\*)
四、遗留问题
所搭建的框架可以应用于生产业务系统吗?并不能,因为还未实现以下功能:
- 前后端分离模式下,如何保证 ajax请求能正常访问资源URI?
- 后台管理系统的"权限菜单",在 oAuth2协议下,还能不能实现"RBAC权限控制"?
- 如何实现在 A业务系统下 logout后,也不能访问其他业务系统?
- 用户登录后,在缓存中存放用户的基本信息(在"业务系统中",已利用 ehcache实现);退出后,删除信息。