是否可以从服务器 (Java) 验证 firebase 令牌 (JWT)
Is it possible to validate a firebase token (JWT) from server (Java)
浏览器客户端 - 使用 Firebase 登录并在本地存储中具有 firebase 用户 ID、令牌。
{
"typ": "JWT",
"alg": "HS256"
}
{
"v": 0,
"d": {
"provider": "password",
"uid": "xxxxd757-5f7f-xx0c-adb1-xxe8ce77d3a0"
},
"iat": 1460560833
}
当浏览器调用服务器 - 一个 REST API 端点时,令牌作为请求传递 header。
现在,服务器配置了 Firebase Secret。
我的问题:是否可以在服务器端验证 firebase 颁发的令牌?服务器不用于身份验证(用户名/密码验证是通过浏览器中的 firebase api 完成的)。
是的,这是可能的。 Java 中有许多库可用于处理 JSON Web 令牌。这是一个例子:https://github.com/jwtk/jjwt
我推荐这个图书馆:https://github.com/auth0/java-jwt
开源项目,非常简洁 API 来自安全公司。
感谢 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();
}
}
自 2020 年 11 月 21 日起,我将使用 firebase-admin,这将是验证 jwt 的更简单方法
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();
来源:https://firebase.google.com/docs/auth/admin/verify-id-tokens#java
浏览器客户端 - 使用 Firebase 登录并在本地存储中具有 firebase 用户 ID、令牌。
{
"typ": "JWT",
"alg": "HS256"
}
{
"v": 0,
"d": {
"provider": "password",
"uid": "xxxxd757-5f7f-xx0c-adb1-xxe8ce77d3a0"
},
"iat": 1460560833
}
当浏览器调用服务器 - 一个 REST API 端点时,令牌作为请求传递 header。
现在,服务器配置了 Firebase Secret。
我的问题:是否可以在服务器端验证 firebase 颁发的令牌?服务器不用于身份验证(用户名/密码验证是通过浏览器中的 firebase api 完成的)。
是的,这是可能的。 Java 中有许多库可用于处理 JSON Web 令牌。这是一个例子:https://github.com/jwtk/jjwt
我推荐这个图书馆:https://github.com/auth0/java-jwt
开源项目,非常简洁 API 来自安全公司。
感谢 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();
}
}
自 2020 年 11 月 21 日起,我将使用 firebase-admin,这将是验证 jwt 的更简单方法
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(idToken);
String uid = decodedToken.getUid();
来源:https://firebase.google.com/docs/auth/admin/verify-id-tokens#java