我刚开始使用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是否需要这样的令牌? 或者我错了。
任何帮助都会受到赞赏,因为我疯了:)