Spring fo Android: запрос заголовков авторизации (не базовый)

У меня есть приложение, которое использует Spring для Android на стороне клиента и Spring Boot на стороне сервера. Мы хотели бы добавить к некоторым запросам авторизацию клиента. Мы уже используем Firebase и OAuth2, и после прочтения этой темы я считаю, что лучше всего было бы использовать заголовок Authentification для отправки JWT на наш сервер с методом носителя для авторизации:

Authorization: Bearer <token>

Что-то подобное ...

Моя проблема заключается в следующем: Spring для Android имеет только встроенный BasicAccessAuthentification, но у меня нет схемы username:password для моих учетных данных клиента, только JWT. Я довольно наивно попытался создать класс, расширяющий HttpAuthentication:

import org.springframework.http.HttpAuthentication;

public class HttpBearerAuthentification extends HttpAuthentication {

  private String token;

  public HttpBearerAuthentification(String token){
    this.token = token;
  }

  public String getHeaderValue() {
    return String.format("Bearer %s", token);
  }

  @Override
  public String toString() {
    return String.format("Authorization: %s", getHeaderValue());
  }

}

Этот класс основан на классе HttpBasicAuthentication в Spring для Android.

А потом выполняем запрос:

// regular request that I know works

...

HttpBearerAuthentification auth = new HttpBearerAuthentification(token);
headers.setAuthorization(auth)

...

// send request and get answer as usuall   

Я знаю, что сами запросы работают (по крайней мере, запросы без авторизации), так что проблема не в этом. Будет ли это правильным способом? Я понимаю, что успех запроса также зависит от того, как сервер обрабатывает запрос. Но пока мой вопрос действительно о стороне клиента. Достаточно ли этого кода для отправки JWT на сервер?

1
0
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После некоторого тестирования запросов, отправленных с помощью SpringForAndroid, кажется, что довольно легко установить значения для заголовков. Поскольку класс HttpHeaders фактически реализует интерфейс Map, все, что мне нужно было сделать, это:

protected HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + userRegistrationToken);

Другие вопросы по теме