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

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

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 класс весной для Android.

И тогда делаем запрос:

// regular request that I know works

...

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

...

// send request and get answer as usuall   

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

1 ответ

Решение

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

protected HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + userRegistrationToken);
Другие вопросы по тегам