Spring fo Android:请求授权标头(不是基本的)

时间:2018-08-17 19:35:51

标签: android oauth-2.0 http-headers http-authentication spring-android

我有一个应用程序,在客户端使用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发送到服务器吗?

1 个答案:

答案 0 :(得分:1)

在对使用SpringForAndroid发送的请求进行一些测试之后,似乎很容易为标头设置值。因为HttpHeaders类实际上实现了Map接口,所以我要做的就是:

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