尝试检索OAuth 2.0访问令牌响应时出错:406不可接受



我正在尝试使用sping-oauth2-client将我的项目与第三方身份验证服务器连接(按照此说明(,现在当我运行应用程序时,在授权步骤之后,我将重定向回我的应用程序,并显示一个包含此错误的页面:

[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response: 406 Not Acceptable: [Media is not supported]

在另一篇Stack Overflow帖子的回复评论中,有人认为这是因为"Spring使用FORM参数为认证代码进行post,而mercadolibre不需要正文,只需要查询参数"。

我现在有这样的配置:

应用程序属性

spring.security.oauth2.client.registration.mercadolivre.provider=mercadolivre
spring.security.oauth2.client.registration.mercadolivre.client-id=...
spring.security.oauth2.client.registration.mercadolivre.client-secret=...
spring.security.oauth2.client.registration.mercadolivre.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.mercadolivre.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
spring.security.oauth2.client.provider.mercadolivre.authorization-uri=https://auth.mercadolivre.com.br/authorization
spring.security.oauth2.client.provider.mercadolivre.token-uri=https://api.mercadolibre.com/oauth/token

安全性.java

@Configuration
public class Security extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login()
.defaultSuccessUrl("/");
}
}

有人知道如何更改Spring行为以匹配服务所需的行为吗?我的意思是,为没有正文、只有查询参数的身份验证代码进行POST?

对我来说,错误是[invalid_token_response]尝试检索OAuth 2.0访问令牌响应时出错:401未经授权

问题是客户端Id和机密已过期/过期。(我以前使用过客户端Id和Secret,它有效(

此错误与在客户端身份验证或获取user-info期间从身份验证服务器获得的响应有关。使用这些属性,我们可以强制两个请求的方法都是BASIC而不是POST

spring.security.oauth2.client.registration.mercadolivre.client-authentication-method=BASIC
spring.security.oauth2.client.provider.mercadolivre.user-info-authentication-method=BASIC

在您被重定向到的控制器中,尝试像这样放置consumps Json:

@GetMapping(value = "", consumes = MediaType.APPLICATION_JSON_VALUE)
public String indexPage() {
.
.
}

MediaType.ALL_VALUE

最新更新