解决springcloud oauth2 401问题 外加源码解析

我在整合oauth2的时候遇到了401问题(在获取access_token的时候)

当时传递的参数是这样的,

后来报401错误,提示信息Full authentication is required to access this resource

后来发现是oauth2内部机制决定的 里面有两种选择,

org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer中有一个

allowFormAuthenticationForClients变量 默认是false 需要设置为true  允许client使用form的方式进行authentication的授权
调用allowFormAuthenticationForClients()方法

原因:通过post方式向/oauth/token这个接口获取access_token的时候,会发现这个时候authentication用的并不是前面授权通过的那个authentication,而是使用的匿名登陆的那个authentication,这样前面的authentication就无法正常使用,也会因此而得到401 authentication is required。

然后在参数中加入 client_id client_secret

重新发送就ok了

成功的返回:

{
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MzI1NDA1NzUsInVzZXJfbmFtZSI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiYWRtaW4iXSwianRpIjoiOThlYzcwMjEtYWRjNi00MzNmLWIzYjQtNzZkNTZkY2Q4ZDc1IiwiY2xpZW50X2lkIjoiY2xpZW50Iiwic2NvcGUiOlsiYXBwIl19.hrPqrqCMNWwZt6oiVTM8dY9AvD5l4SJL3Sn386-VQysf-oMUivGLliFR7x0qXJbgw1-0O0MysmUu5YDWKEdFCYCAJSBDqFyr3SNpCiKbVfLmGDDoDKRYHeIRSWknSCEIVJYhmNBIaPtf8_RNX6P1YcDYW5bEagf29abrniKFZ_A0AfhD5q7x5vx5gdNqIppDRwH0Ygq_RLww6XASQ4jzVkSo28a1-L58SFBiDTy7yo0aozfXxL3428f-GYgClu4EHatn-0P2Ah5BpDLe54RRNWtygwXNmW-8Q5zKdRBFP03wz5nPa7surP7qfid3pQlsq1C8I3DWyQKuCrWJgBxw6w",
    "token_type": "bearer",
    "expires_in": 43199,
    "scope": "app",
    "user_name": "admin",
    "jti": "98ec7021-adc6-433f-b3b4-76d56dcd8d75"
}

 

问题解决之后:从源码的角度分析一下

AuthorizationServerSecurityConfigurer类中

146行

this.clientCredentialsTokenEndpointFilter(http);这个方法的作用是重新形成授权信息,以form形式提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孔明兴汉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值