是否可以从服务器(Java)验证firebase令牌(JWT)

时间:2016-04-13 15:27:03

标签: java spring-boot firebase jwt firebase-authentication

浏览器客户端 - 使用Firebase登录并在本地存储中具有firebase用户标识,令牌。

{
  "typ": "JWT",
  "alg": "HS256"
}
{
  "v": 0,
  "d": {
    "provider": "password",
    "uid": "xxxxd757-5f7f-xx0c-adb1-xxe8ce77d3a0"
  },
  "iat": 1460560833
} 

当浏览器调用服务器 - REST API端点时,令牌将作为Request标头传递。

现在,服务器配置了Firebase密钥。

我的问题:是否可以在服务器端验证firebase颁发的令牌?服务器不用于身份验证(用户名/通过验证是通过浏览器的firebase api完成的。)

4 个答案:

答案 0 :(得分:3)

我建议使用此库:https://github.com/auth0/java-jwt

开源项目,其中包含来自安全公司的非常简洁的API。

答案 1 :(得分:3)

感谢luboskrnac和Mark B.我尝试了Java-jwt和jjwt库,并在我的代码中使用了jjwt。

@Test
public void tokenValidateTest() {
    String token = "exX0xXAi0iJKV1QiLCJhbGciOiJIUzI1NiJ9.eyXK2IjxxxJkIjp7InByb3ZpZGVyIjoicGFzc3dvcmQiLCJ1aWQiOiI5NDA2ZDc1Ny01ZjdmLTQ0MGMtYWRiMS05MmU4Y2U3N2QzYTBjKSwiaWF0IjoxNDYwMNYwODMzxQ.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String secret = "6x3Ox29Xx1xxxXXiI0P3PL5pWdNUE5sPcXXXLxxxX";

    try {
        Claims claims = Jwts.parser().setSigningKey(secret.getBytes("UTF-8")).parseClaimsJws(token).getBody();

        Date issuedDate = claims.getIssuedAt();


        assert(issuedDate.before(new Date()));

    } catch (Exception ex) {
        ex.printStackTrace();
    }

}

答案 2 :(得分:2)

是的,这是可能的。有许多库用于在Java中使用JSON Web Tokens。这是一个例子:https://github.com/jwtk/jjwt

答案 3 :(得分:0)

从11/21/20开始,我将使用firebase-admin,它将是验证jwt的更简单方法

FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();

来源:https://firebase.google.com/docs/auth/admin/verify-id-tokens#java