spring security+Oauth2密码模式认证时,报401,Unauthorized的问题排查

第一种情况:

进行 /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异常。如下图所示

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荆茗Scaler

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值