我有一个应用程序,在客户端使用Android的Spring,在服务器端使用Spring Boot。我们想将客户授权添加到某些请求中。我们已经使用Firebase和OAuth2,并且在阅读了该主题之后,我觉得最好的方法是使用Authentification标头将JWT发送到我们的服务器,并使用Bearer方法进行授权:
Authorization: Bearer <token>
类似的东西...
我的问题是:Android的Spring仅内置了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());
}
}
该类基于Spring for Android中的HttpBasicAuthentication
类。
然后执行请求:
// regular request that I know works
...
HttpBearerAuthentification auth = new HttpBearerAuthentification(token);
headers.setAuthorization(auth)
...
// send request and get answer as usuall
我知道请求本身可以正常工作(至少是未经授权的请求),所以这不是问题。那是正确的方法吗?我了解请求的成功还取决于服务器如何处理请求。但是现在,我的问题确实是关于客户端的。此代码足以将JWT发送到服务器吗?
答案 0 :(得分:1)
在对使用SpringForAndroid发送的请求进行一些测试之后,似乎很容易为标头设置值。因为HttpHeaders类实际上实现了Map接口,所以我要做的就是:
protected HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + userRegistrationToken);