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);