提供的身份验证凭证格式错误或已过期

时间:2020-01-21 19:35:40

标签: android firebase firebase-authentication firebaseui

在我的Android应用中,我使用Google登录通过Firebase AuthUI登录。该部分有效。现在,我尝试使用IdToken登录,但始终收到此错误消息:

com.google.android.gms.tasks.RuntimeExecutionException: com.google.firebase.auth.FirebaseAuthInvalidCredentialsException:提供的身份验证凭证格式错误或已过期。 [IdP响应中的id_token无效:XXXXXXX ...]

这有效并成功登录到我的Firebase项目:

@OnClick(R.id.sign_in)
public void signIn() {
    startActivityForResult(
            AuthUI.getInstance().createSignInIntentBuilder()
                    .setTheme(getSelectedTheme())
                    .setLogo(getSelectedLogo())
                    .setAvailableProviders(getSelectedProviders())
                    .setTosAndPrivacyPolicyUrls(getSelectedTosUrl(),getSelectedPrivacyPolicyUrl())
                    .setIsSmartLockEnabled(true,
                            true)
                    .build(),
            RC_SIGN_IN);
}

但是尝试使用signInWithCredential制成的凭据来使用IdToken会给我上述错误:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        handleSignInResponse(resultCode, data);
        return;
    }

}

@MainThread
private void handleSignInResponse(int resultCode, Intent data) {
    IdpResponse response = IdpResponse.fromResultIntent(data);

    if (resultCode == RESULT_OK) {
        FirebaseAuth auth = FirebaseAuth.getInstance();
        FirebaseUser firebaseUser = auth.getCurrentUser();

        if(firebaseUser != null){

            auth.getCurrentUser().getIdToken(true).addOnCompleteListener(task -> {

                String idToken = task.getResult().getToken();
                AuthCredential cred = GoogleAuthProvider.getCredential(idToken ,null);

                auth.signInWithCredential(cred).addOnCompleteListener(task1 -> 
                        Log.v(TAG,"results: " + task1.getResult()));

            });
        }
    }
}

我正在关注this tutorial,我的目标是登录多个Firebase项目。

尝试使用上述IdToken中的凭据登录辅助Firebase项目会返回相同的错误。

FirebaseApp app = FirebaseApp.getInstance("secondary");
FirebaseAuth.getInstance(app).signInWithCredential(credential);

2 个答案:

答案 0 :(得分:1)

当设备上的时间或时区错误时,我收到此错误。 设置正确的时间即可解决问题。

答案 1 :(得分:0)

我建议您尝试更新Firebase身份验证插件或Google登录插件