2016-04-22 31 views
2

私はFirebaseにメールで&パスワード認証を使用しています。ユーザーが正常にサインインされると、トークンを含むAuthDataオブジェクトが届きます。
私はバックエンドにこのトークンを送って、それを確認し、それからuidを抽出したいと思います - 残念ながら、私はこれを行う方法を知らない。Firebaseトークンの復号化/検証

私はFirebaseの秘密を知っています。jwt.ioに行くと、署名が確認され、正しいペイロードが表示されます。私は復号化処理のためのjjwtを使用してきた私のバックエンド上でJavaを実行しているので、残念ながら、それは常に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(); 

しかし、同じ例外が発生しました。だから私は何が間違っているの?前もって感謝します。

+0

ユーザーがサインインしてgetAuth()を呼び出すと、uidフィールドを持つオブジェクトが返されます。 https://www.firebase.com/docs/web/api/firebase/getauth.html –

+0

@RonHarlev残念ながら私はUIDをプレーンテキストでサーバーに送信したくないということを認識しています。これはレンダリングするのでJWTの背後にあるセキュリティは役に立たない。私がそうしたとしても、トークンが有効であることを確認する必要があります。不正なサードパーティーが思い付いた生成物ではありません。 – user3420815

答えて

5

parseBase64Binaryの代わりにgetBytesを使用しようとしましたか?

Claims claims = Jwts.parser().setSigningKey("my-firebase-secret".getBytes("UTF-8")).parseClaimsJws(jwt).getBody(); 
+0

それだけです。どうもありがとうございました。 – user3420815