Маркер Firebase ID из клиентского приложения дает исключение при проверке бэкэнда Java

Я только начал использовать Firebase. Реагировать приложение + 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 google-http-client-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".

Является ли проблема с проверкой веб-токена, и вторая точка не требуется спецификацией или firebase lib виноват в таком токене? Или я где то не прав.

Любая помощь будет оценена, так как я схожу с ума:)

0 ответов

Другие вопросы по тегам