OAuth2.0 — Fitbit не возвращает код аутентификации (ошибка атрибутов не может быть пустой)

#spring-boot #oauth-2.0 #fitbit

#весенняя загрузка #oauth-2.0 #fitbit

Вопрос:

Я боролся с реализацией потока предоставления кода авторизации для Fitbit API. Я настроил WebSecurityConfigurerAdapter, и я правильно перенаправлен на страницу Fitbit / oauth2 / authorize, где я могу дать разрешение. Однако, когда я разрешаю доступ к своему приложению, в нем говорится следующее: authorization_request_not_found. Кроме того, URL-адрес не содержит кода. введите описание изображения здесь Я не могу найти хорошую документацию о том, как реализовать следующий шаг с помощью Spring Boot. Я был бы очень признателен, если бы кто-нибудь мог указать мне правильное направление. Спасибо Stack: введите описание изображения здесь

Ответ №1:

Проблема заключается в запросе токена доступа. После предоставления кода авторизации вам необходимо установить заголовок авторизации в basic. Ваш client_id и secret, объединенные двоеточием и закодированные в Base64, будут вашим основным значением заголовка авторизации.

Вы можете найти больше информации в официальных документах: Запрос токена доступа

Реализовать это в Spring security довольно просто. Просто следуйте этому руководству: Пользовательский запрос токена

Метод преобразования класса CustomRequestEntityConverter должен выглядеть следующим образом:

 @Override
public RequestEntity<?> convert(OAuth2AuthorizationCodeGrantRequest req) {
    RequestEntity<?> entity = defaultConverter.convert(req);
    MultiValueMap<String, String> headers = entity.getHeaders();

    String authorization = Base64.getEncoder().encodeToString(BASIC_AUTHORIZATION.getBytes());

    HttpHeaders httpHeaders = new HttpHeaders();

    httpHeaders.setBasicAuth(authorization);
    httpHeaders.addAll(headers);

    return new RequestEntity<>(entity.getBody(), httpHeaders, entity.getMethod(), entity.getUrl());
}