Произошла ошибка при попытке получить ответ токена доступа OAuth 2.0: 406 Недопустимо - PullRequest
1 голос
/ 13 апреля 2020

Я пытаюсь использовать spirng-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]

В комментариях к ответу в другом сообщении переполнения стека кто-то предположил, что это происходит, потому что «Spring делает POST для кода аутентификации с параметрами FORM, тогда как mercadolibre не ожидает тела, только параметры запроса».

У меня есть эта конфигурация прямо сейчас:

application.properties

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 для кода аутентификации без тела, только параметры запроса?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Эта ошибка относится к ответу, который вы получаете от сервера аутентификации, либо во время аутентификации клиента, либо во время получения 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
0 голосов
/ 16 апреля 2020

В контроллере, на который вы перенаправлены, попробуйте поставить расход Json, например:

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

Или MediaType.ALL_VALUE

...