我正在使用Firebase和電子郵件&密碼驗證。一旦用戶成功登錄,我將收到一個包含令牌的AuthData
對象。
我想發送這個令牌到我的後端,驗證它並從中提取uid
- 不幸的是我不知道該怎麼做。解密/驗證Firebase令牌
我知道Firebase的祕密,如果我去jwt.io,輸入令牌和祕密簽名驗證,我看到正確的有效載荷 - 所以這實際上工作。
由於我在我的後臺運行的Java我一直在使用jjwt的解密過程遺憾的是它總是拋出一個SignatureException
:
io.jsonwebtoken.SignatureException:JWT簽名不匹配本地計算簽名。 JWT有效性不能被斷言,也不應該被信任。
繼我一直在使用的代碼:
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
byte[] encodedKey = Base64.decode("my-firebase-secret", Base64.DEFAULT);
Key k = new SecretKeySpec(encodedKey, signatureAlgorithm.getJcaName());
Claims claims = Jwts.parser()
.setSigningKey(k)
.parseClaimsJws("the-token").getBody();
我也與下面的代碼段試了一下:
Claims claims = Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary("my-firebase-secret"))
.parseClaimsJws(jwt).getBody();
但得到了同樣的異常。那麼我做錯了什麼?提前致謝。
當用戶登錄調用getAuth()時,將返回一個帶有uid字段的對象。 https://www.firebase.com/docs/web/api/firebase/getauth.html –
@RonHarlev我知道,不幸的是我不想以純文本發送UID到我的服務器,因爲這將呈現智威湯遜背後的安全性毫無用處。即使我這樣做,我仍然需要驗證令牌是否有效,而不是一些生成未授權第三方提出的東西。 – user3420815