Логин Android Firebase неверный idToken - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь реализовать аутентификацию с помощью Firebase, но в настоящее время у меня возникают странные проблемы.

В моем бэкэнде я использую это для проверки токена:

async getUser(token: string) {
    const ticket = await client.verifyIdToken({
        idToken: token,
        audience: CLIENT_ID
    });

    const payload = ticket.getPayload();
    const userid = payload.sub;

    ...
}

Когда я отправляю этот токен с IdpResponse.fromResultIntent(data), все работает просто отлично.

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == RC_SIGN_IN) {
        val response = IdpResponse.fromResultIntent(data)

        if (resultCode == Activity.RESULT_OK) {
            response?.idpToken?.let {
                val loginRepo = LoginRepository(this)
                loginRepo.login(Login(it), {}, {})
            }
        } else {
            ...
        }
    }
}

Но когда я посылаю токен от currentUser, async getUser(token: string) всегда выдает исключение.

val user = FirebaseAuth.getInstance().currentUser
if (user != null) {
    user.getIdToken(false).addOnCompleteListener {
        if (it.isSuccessful) {
            val token = it.result?.token
            val loginRepo = LoginRepository(this)
            token?.let { loginRepo.login(Login(it), {
                ...
            }, {
                ...
            }) }
        }
    }
} 

Исключение:

Ошибка: не найдено pem для конверта: { "ALG": "RS256", "ребенок": "... "" Тип ":" JWT"}

При использовании: https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123 токен, полученный из idpResponse, работает нормально, но другой токен, полученный из currentUser, не работает, возвращает:

{ «ошибка»: «неверный_кокен», "error_description": "Неверное значение"}

Как я могу получить de idpToken от currentUser? Почему не работает idToken?

1 Ответ

0 голосов
/ 24 марта 2019

вам может понадобиться проверить документацию пожарной базы:

https://firebase.google.com/docs/auth/admin/verify-id-tokens

FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
mUser.getIdToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            if (task.isSuccessful()) {
                String idToken = task.getResult().getToken();
                // Send token to your backend via HTTPS
                // ...
            } else {
                // Handle error -> task.getException();
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...