来自客户端应用程序的Firebase ID令牌在Java后端验证中提供了异常

时间:2017-11-29 16:13:43

标签: java firebase firebase-authentication json-web-token google-http-client

我刚开始使用Firebase。反应app + Java后端。

反面授权很有效但是当我将用户的id令牌发送到后端并尝试验证是否正在使用firebase库时,我得到了一个异常。

我从文档中获取了所有代码。

在js客户端中:

firebase.auth().currentUser.getToken(/* forceRefresh */ true).then(function(idToken)...

在java中失败:

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

给了我:

java.lang.IllegalArgumentException: null
    at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111) ~[google-http-client-1.22.0.jar:1.22.0]
    at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37) ~[google-http-client-1.22.0.jar:1.22.0]
    at com.google.api.client.json.webtoken.JsonWebSignature$Parser.parse(JsonWebSignature.java:602) ~[google-http-client-1.22.0.jar:1.22.0]
    at com.google.firebase.auth.FirebaseToken.parse(FirebaseToken.java:44) ~[firebase-admin-5.5.0.jar:na]
    at com.google.firebase.auth.FirebaseAuth$2.call(FirebaseAuth.java:213) ~[firebase-admin-5.5.0.jar:na]
    at com.google.firebase.auth.FirebaseAuth$2.call(FirebaseAuth.java:204) ~[firebase-admin-5.5.0.jar:na]
    at com.google.firebase.tasks.Tasks$1.run(Tasks.java:82) ~[firebase-admin-5.5.0.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_151]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_151]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]

我正在使用 - com.google.firebase - firebase-admin - 版本5.5.0

uid的数据库操作和用户检索在java后端完美运行。

我下载了所有java源代码以跟踪错误,我发现“点”检查失败

Preconditions.checkArgument(secondDot != -1);
在类JsonWebSignature中的

包com.google.api.client.json.webtoken 谷歌-HTTP-客户1.22.0.jar

public JsonWebSignature parse(String tokenString) throws IOException {
      // split on the dots
      int firstDot = tokenString.indexOf('.');
      Preconditions.checkArgument(firstDot != -1);
      byte[] headerBytes = Base64.decodeBase64(tokenString.substring(0, firstDot));
      int secondDot = tokenString.indexOf('.', firstDot + 1);
      Preconditions.checkArgument(secondDot != -1);
      Preconditions.checkArgument(tokenString.indexOf('.', secondDot + 1) == -1);
     ...

当我在令牌的末尾添加点时,请检查passess并让用户返回。 我想知道我做错了什么..我的令牌格式是否正确,或者java是否过于严格检查有效性

我从firebase js客户端收到的令牌格式为“Header.Payload” 它不包含JWS RFC“Header.Payload.Signature”

中的第二个点

是否需要使用webtoken验证和第二个点的问题,或者firebase lib是否需要这样的令牌? 或者我错了。

任何帮助都会受到赞赏,因为我疯了:)

0 个答案:

没有答案