Android Firebase登录无效idToken

问题描述 投票:0回答:1

我正在尝试使用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), {
                ...
            }, {
                ...
            }) }
        }
    }
} 

抛出异常:

错误:找不到信封:{“alg”:“RS256”,“kid”:“...”,“typ”:“JWT”}

使用时:从idpResponse检索的https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123令牌工作正常,但从currentUser检索到的另一个令牌没有,返回:

{“error”:“invalid_token”,“error_description”:“无效值”}

我如何从currentUser获得de idpToken?为什么idToken不起作用?

android firebase kotlin
1个回答
0
投票

您可能需要检查firebase文档:

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();
            }
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.