记录一次spring发布的oauth2服务器demo学习——第二步,看全流程网络(一)
修改日志级别
修改application.yml文件,日志级别调整,authorization、resource、client服务,日志级别都修改为下配置
日志配置说明
logging: level: # 根日志级别 root: INFO # 基础web相关日志级别 org.springframework.web: DEBUG # security相关日志级别 org.springframework.security: DEBUG # oauth2相关日志界别 org.springframework.security.oauth2: DEBUG # spring-boot自动配置日志级别 org.springframework.boot.autoconfigure: INFO
依次启动authorization、resource、client服务。
浏览器查看网络跳转
以下结果都是站在浏览器的角度看网络请求
. 尝试访问client首页 http://127.0.0.1:8080
页面最终停留在authorization服务
登录页面,中间经历了几次重定向,我们一次一次的看
第一次网络请求地址为:http://127.0.0.1:8080 这就是我们初次浏览器输入想访问的地址
第二次网络请求地址为:http://127.0.0.1:8080/oauth2/authorization/messaging-client-oidc 这是client服务
配置的oauth2Login登录地址。
第三次网络请求地址为:http://172.18.128.1:9000/oauth2/authorize?response_type=code&client_id=messaging-client&scope=openid&state=DIRjSwj2CpK54pikJFmo_Kx8kKQK1BLeGKDk7ZdbdDQ%3D&redirect_uri=http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc&nonce=HaMxUSWOXf8_DJqPHRWtMsiBl8SAcBvUin9Ikd_dgSc 由第二次网络请求到client 服务
,传入的messaging-client-oidc
匹配到application.yml
配置的oauth2认证服务配置
。然后拼接出oauth2登录地址
,访问authorization 服务
授权地址。
第四次网络请求地址为:http://172.18.128.1:9000/login 由于第三次网络请求到authorization 服务
,发现没有登录,就跳转至登录页面
在authorization服务
输入正确的账号密码,登录。
页面最终停留在http://127.0.0.1:8080/index 之所以不是 http://127.0.0.1:8080 是因为访问 http://127.0.0.1:8080 的时候client服务
内部进行了一次重定向。
第一次网络请求地址为:http://172.18.128.1:9000/login 上一批次浏览器访问的最后一个请求,改访问由前面的几次重定向最终确定,改请求与authorization 服务
之间的session保存了前面第三次网络请求的实际目标地址,登录过后会自动跳转至目标地址。如果手动输入 http://172.18.128.1:9000/login 访问,则目标地址为authorization 服务
默认登录成功跳转地址(默认为 '/')。
第二次网络请求地址为:http://172.18.128.1:9000/oauth2/authorize?response_type=code&client_id=messaging-client&scope=openid&state=DIRjSwj2CpK54pikJFmo_Kx8kKQK1BLeGKDk7ZdbdDQ%3D&redirect_uri=http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc&nonce=HaMxUSWOXf8_DJqPHRWtMsiBl8SAcBvUin9Ikd_dgSc 这是登录前的实际目标地址。该地址传入了oauth2协议
所需要的 认证类型,对接客户id,授权范围,回调地址(state,nonce这两个参数不是必要的,之所以有是为了扩展功能,为client添加自定义的回传数据),还有需要注意的就是本authorization服务
中的授权类型参数传递key改成了response_type
。
第三次网络请求地址为:http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc?code=rEPcXjkFqwu8bTQ269NfGgtNAWo41NBjyEkTY4B_We1p2SM1r4hl_Zj0sHDNI-FpMCq9-YjIskojxhAcjmRzwyMbNWmNIDUDqNDa9kyxzaqgeMSazsbBLwoGgipyV8VY&state=DIRjSwj2CpK54pikJFmo_Kx8kKQK1BLeGKDk7ZdbdDQ%3D 上次网络请求带了一下client校验参数给authorization 服务
,确认是合法的client后,回跳至指定的redirect-url。并带上code
第四次网络请求地址为:http://127.0.0.1:8080/ 就是我们最初在浏览器输入的client 服务
首页地址。这是由于回传的code,在client 服务
经过一系列操作认证成功。故回跳至我们最初的目标访问地址。
上一篇提到的官方说的串session cookie,其实就是这个目标地址,注意,我们在`client 服务` 与`authorization 服务`都有一个目标地址,这个地址都是与浏览器访问的session绑定的,而如果ip是一样的话就可能出问题。过去看到过这个机制,有空找下代码再补充。
第五次网络请求地址为:http://127.0.0.1:8080/index 这个就是client 服务
的简单访问重定向
authorization、client、resource 服务角度看网络请求
统一配置日志级别,除了logging.level.root设置为INFO,别的都设置为DEBUG,便于查看有哪些请求。
不设置为ROOT的话,关于请求的请求头信息会不显示,但是设置为ROOT的话,会显示一大批日志出来,不便于我们查找接口,所以我们先这样确定有哪些接口请求,再设置打开ROOT的debug
以下内容是真正的重点,不止包含了浏览器发起的网络请求处理,也会有后台服务之间的网络请求
以下内容说明
client
指 client 服务
auth
指 authorization 服务
resource
指 resource服务
web
指 浏览器
client地址:http://127.0.0.1:8080
auth地址:http://172.18.128.1:9000
resource地址:http://172.18.128.1:8090
简单过一遍网络请求流程
client
接收web
的 / 请求。未登录
,重定向至 /oauth2/authorization/messaging-client-oidcclient
接收web
的 /oauth2/authorization/messaging-client-oidc 请求,重定向至 http://172.18.128.1:9000/oauth2/authorizeauth
接收web
的 /oauth2/authorize 请求。未登录
,重定向至 /login 登录页面auth
接收web
等表单登录请求,校验登录成功,重定向至 /oauth2/authorize 。auth
接收web
的 /oauth2/authorize 请求。重定向至 http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc 地址。client
接收web
的 /login/oauth2/code/messaging-client-oidc 请求,向auth服务器发送code校验请求,地址为:http://172.18.128.1:9000/oauth2/token 获取jwt相应参数获取请求,地址为:http://172.18.128.1:9000/oauth2/jwks。获取token,jwks后,为session设置登录状态
,重定向至初始目标地址 / 。auth
接收client
的 /oauth2/token 请求,返回tokenauth
接收client
的 /oauth2/jwks 请求,返回jwt相关信息
client
接收web
的 / 请求,重定向至 /indexclient
接收web
的 /index 请求,返回相应视图
文章太长了,详解网络请求放下一篇:
记录一次spring发布的oauth2服务器demo学习——第二步,看全流程网络(二)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律