OAuth2AuthenticationProcessingFilter资源认证服务器过滤器
资源服务器如何认证访问身份?
一般会传入access_token,那资源认证服务器是如何解析令牌以及如何与资源认证服务器的token库进行对比的?
核心代码在org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter#doFilter
Debug验证:
1、先用密码模式生成一个访问的access_token
2、然后用postman进行资源请求:
3、进入断点
图1
(1):根据tokenExtractor的extract方法获取请求携带的token信息
方法:org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor#extractHeaderToken
经过:org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor#extract
将token封装成
PreAuthenticatedAuthenticationToken
这里可以看到PreAuthenticationAuthenticationToken是Authentication的子类,回到图1的第一步,返回authentication对象
(2)、验证authenticaion
图1的第二步,进入断点
从服务端的token存储位置取出OAuth2AccessToken对象,这里tokenStore.readAccessToken(accessTokenValue)方法是核心,点进去看-》
就是从accessTokenStore中获取的。
此时权限信息已经通过token取到,继续往下验证
checkClientDetails(auth)方法
验证当前登录用户的scope属性是否符合所请求的资源所需的权限要求,如果不满足,抛出
Invalid token contains disallowed scope (" + scope + ") for this client
通过验证后,将身份认证信息返回,第二步结束
(3):将身份信息绑定到SecurityContextHolder中
这步没什么好说的,进入断点就是
将身份信息设置到上下文的authentication属性中。
至此,token的服务端验证逻辑结束
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了