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

Posted

技术标签:

【中文标题】提供的身份验证凭据格式错误或已过期【英文标题】:The supplied auth credential is malformed or has expired 【发布时间】:2020-05-07 22:12:40 【问题描述】:

在我的 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);

【问题讨论】:

检查您的日期和时间 【参考方案1】:

当设备上的时间或时区错误时,我收到此错误。 设置正确的时间解决了它。

【讨论】:

谢谢!这有很大帮助。我正在对设备时间设置进行一些测试。没想到它会弄乱我的身份验证。 确实,检查你的时区,重启你的手机,它可能真的会修复它【参考方案2】:

建议你尝试更新firebase auth插件或者google登录插件

【讨论】:

以上是关于提供的身份验证凭据格式错误或已过期的主要内容,如果未能解决你的问题,请参考以下文章

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

PlayGames ERROR_INVALID_CREDENTIAL

Firebase Facebook 身份验证:格式错误或过期的身份验证凭据

POST 请求的身份验证错误:“未提供身份验证凭据”使用 Axios,但使用 POSTMAN 工作

Spring security 自定义身份验证提供程序总是导致错误的客户端凭据

djangorestframework-jwt 未提供身份验证凭据