spring security+Oauth2密码模式认证时,报401,Unauthorized的问题排查
第一种情况:进行 /auth/token的post请求时,没有进行httpbasic认证。什么是http Basic认证?http协议的一种认证方式,将客户端id和客户端密码按照“客户端ID:客户端密码”的格式拼接,并用base64编码,放在header中请求服务端。例子如下:Authorization:Basic ASDLKFALDSFAJSLDFKLASD=ASDLKFALDSFAJSLDFK
第一种情况:
进行 /auth/token 的post请求时,没有进行http basic认证。
什么是http Basic认证? http协议的一种认证方式,将客户端id和客户端密码按照“客户端ID:客户端密码”的格式拼接,并用base64编码,放在 header中请求服务端。例子如下: Authorization:Basic ASDLKFALDSFAJSLDFKLASD= ASDLKFALDSFAJSLDFKLASD= 就是 客户端ID:客户端密码 的64编码
spring security中的认证主要就是通过一连串的过滤器来做的各种验证。http basic认证的过滤器为 BasicAuthenticationFilter。
下图为BasicAuthenticationFilter中的过滤器执行方法,如果authRequest为空,即header中没有传 Authorization 。


继续往下执行,会执行到 AnonymousAuthenticationFilter 中 doFilter 方法。如下图所示,最终 spring security的会话SecurityContextHolder中会存放一个匿名的认证信息,AnonymousAuthenticationToken,在最终的决策管理器AccessDecisionManager中会导致投票失败。

下图为 AffirmativeBased 决策管理器抛出的 access denied 异常。

第二种情况:
ClientDetailsServiceConfigurer配置中的clientDetailsService要确保配置成功或者不使用数据库存放数据时要确保clientDetail信息
正确存放到内存memory中。因为spring security执行过程中先去内存中获取,获取不到再去配置的数据库中获取,如果还获取不到,最终也会抛出401 Unauthorized异常。如下图所示


魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)