spring boot sso

代码:https://gitee.com/forgot940629/ssov2

授权服务

登录成功后,session中会存储UsernamePasswordAuthenticationToken,之后每次请求code时都会用UsernamePasswordAuthenticationToken生成OAuth2Authentication,并将OAuth2Authentication和code建立映射关系,并将映射关系存储到AuthorizationCodeServices。获取令牌时,根据code获取OAuth2Authentication,然后根据OAuth2Authentication生成令牌并返回给client。令牌中包含用户id 客户端id 过期时间 access_token等信息

http流程

请求 服务 简介 cookie set-cookie Location 备注
GET /client2 客户端 访问接口 -- -- -- 目前暂不清楚起始阶段为啥有两次/client2
GET /client2 客户端 访问接口 -- 设置sessionid1 /client2/login
GET /client2/login 客户端 sessionid1 -- /uaa/oauth/authorize
GET /uaa/oauth/authorize sso服务 尝试获取授权码 -- 设置sessionid2 /uaa/authentication/require
GET /uaa/authentication/require sso服务 返回登录页面 sessionid2 -- --
POST /uaa/authentication/form sso服务 提交登录信息 sessionid2 设置sessionid3 /uaa/oauth/authorize
GET /uaa/oauth/authorize sso服务 尝试获取授权码 sessionid3 -- /client2/login
GET /client2/login 客户端 sessionid1 设置sessionid4 /client2
GET /client2 客户端 sessionid4

http详细交互流程

访问服务


重定向/client2/login

第一次尝试获取授权码

获取登录页面

提交登录信息

第二次尝试获取授权码

重定向/client2/login

访问资源

session&重定向

某些响应中Location设置了重定向地址,这个地址存储在session中。整个登录流程虽然sessionid涉及四个之多,但实际上可以将其归纳为两个session,一个是客户端的session,一个是sso服务的session。

客户端session中存储的是用户最初的访问链接,在此例中就是http://127.0.0.1:8084/client2

sso服务session中存储的是http://127.0.0.1:8084/client2/login

数据结构

记录关键数据结构,便于断点调试

维护sessionid和session的映射关系:org.apache.catalina.session.ManagerBase

session对象,对象中保存session各种属性:org.apache.catalina.session.StandardSession

请求:org.apache.catalina.connector.Request

响应:org.apache.catalina.connector.Response

org.apache.catalina.connector.CoyoteOutputStream#write(byte[], int, int)将返回信息刷到输出流中

令牌生成/刷新/获取:AuthorizationServerTokenServices

jwt加密:org.springframework.security.jwt.JwtHelper#encode(java.lang.CharSequence, org.springframework.security.jwt.crypto.sign.Signer)

org.springframework.security.oauth2.provider.code.InMemoryAuthorizationCodeServices#authorizationCodeStore中保存code和令牌所需信息之间的映射关系

sso的session中存储登录信息:org.apache.catalina.session.StandardSession#attributes的SPRING_SECURITY_CONTEXT中存储着UsernamePasswordAuthenticationToken

org.springframework.security.oauth2.provider.code.AuthorizationCodeServices授权码相关服务,负责生成code和根据code获取OAuth2Authentication

相关推荐
卓码软件测评3 小时前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
Lionel_SSL6 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛6 小时前
手搓Springboot
java·spring boot·spring
老华带你飞7 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
独行soc7 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
脑子慢且灵7 小时前
[JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
java·后端·servlet·tomcat·intellij-idea·web
华仔啊8 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端
异常驯兽师9 小时前
Spring 中处理 HTTP 请求参数注解全解析
java·spring·http
连合机器人10 小时前
晨曦中的守望者:当科技为景区赋予温度
java·前端·科技
AD钙奶-lalala10 小时前
idea新建的项目new 没有java class选项
java·ide·intellij-idea