1

我有一个应用程序在客户端使用 Spring for Android,在服务器端使用 Spring Boot。我们想为某些请求添加客户端授权。我们已经使用了 Firebase 和 OAuth2,在阅读了这个主题之后,我觉得最好的方法是使用 Authentification 标头将 JWT 发送到我们的服务器,并使用承载方法进行授权:

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

}

该类基于HttpBasicAuthenticationSpring for Android 中的类。

然后做请求:

// regular request that I know works

...

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

...

// send request and get answer as usuall   

我知道请求本身有效(至少未经授权的请求)所以这不是问题。那是正确的方法吗?我了解请求的成功还取决于服务器如何处理请求。但就目前而言,我的问题实际上是关于客户端的。此代码是否足以将 JWT 发送到服务器?

4

1 回答 1

1

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

protected HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + userRegistrationToken);
于 2018-08-30T19:31:47.440 回答