代码之家  ›  专栏  ›  技术社区  ›  Tom

“开发人员错误:此应用程序配置错误”Google登录firebase,客户端id为白名单

  •  3
  • Tom  · 技术社区  · 8 年前

    我正在尝试在android应用程序上迁移到firebase auth。包名和SHA1当前与旧的应用程序引擎项目(我不想升级到firebase)关联,因此我无法将SHA1指纹添加到新的firebase项目中。app engine项目目前正在生产中,因此我无法删除android客户端ID或删除该项目。此处的文档 https://support.google.com/firebase/answer/6401008?authuser=0 说我应该能够将旧应用程序引擎项目的客户端ID列入白名单。然而,当我这样做,然后尝试使用firebase auth登录到google的应用程序时,我得到了以下错误 "Developer error: this application is misconfigured. Check your SHA1 and package name in the Firebase console."

    我也试过这里的说明 https://firebase.googleblog.com/2016/12/working-with-multiple-firebase-projects-in-an-android-app.html 包括通过 GoogleSignInOptions 使用相应项目中的web客户端id将对象导入AuthUI builder,如下所示:

    private void StartLoginActivity() {
    
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken("<my-client-id>.apps.googleusercontent.com")
                .requestEmail()
                .build();
    
        List<AuthUI.IdpConfig> providers = Arrays.asList(
                new AuthUI.IdpConfig.EmailBuilder().build(),
                new AuthUI.IdpConfig.GoogleBuilder().setSignInOptions(gso).build());
    
        startActivityForResult(
                AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .setAvailableProviders(providers)
                        .build(),
                RC_SIGN_IN);
    }
    

    但当我这样做的时候,我会得到错误 java.lang.IllegalArgumentException: two different server client ids provided

    因此,我的问题是,当SHA1与现有GCP项目关联时,如何配置firebase项目以启用身份验证?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Tom    8 年前

    我从firebase支持部门得到了以下响应,并能够使其正常工作:

    通过Google服务配置Google登录FirebaseUI。json>文件问题是,如果您使用的OAuth客户端ID来自不同的>项目中,默认的\u web\u client\u id将配置不正确。它将是>指向新Firebase项目的自动生成web客户端id;我们>我不想这样。

    在的步骤1中 https://developers.google.com/identity/sign-in/android/backend- &燃气轮机;auth,我们调用#requestIdToken(getString(R.string.server\u client\u id))。输入(>);firebaseUI,这也已完成,此资源为“default\u web\u client\u id”->由谷歌服务生成。json。这需要改变。

    因此,要解决此问题,您需要使用project中的web OAuth客户端ID>#1,您可以通过以下任一方式完成此操作:

    更改google服务。json文件-您需要更改客户端id>项目#1中正确web客户端id的字段 您还需要将web客户端列入白名单(Auth>Sign-In Providers>Google)>OAuth从项目#1到项目#2

    不要使用谷歌服务。json,以便您可以自己设置默认的\u web\u client\u id。我们为此制定了指南,请参见 here

    以下是我实现这一目标的过程:

    1. 转到GCP控制台(>);选择旧项目(>);API和服务>资格证书

    2. 创建凭据(>);OAuth客户端ID

    3. 选择 Web应用程序

      • 输入名称
      • 将Javascript源和授权重定向URL保留为空
    4. 复制客户端id

    5. 打开firebase控制台

    6. 转到“身份验证”>登录方法>谷歌
    7. 将新客户端id列入白名单>添加(>);拯救
    8. 返回“设置”>将firebase添加到android应用程序
      • 添加您的android软件包名称
      • 将签名证书保留为空
    9. 单击注册应用程序
    10. 下载(&A);打开谷歌服务。json
    11. 在oauth\u客户端中,应用程序中的每个oauth客户端id都有一个条目(仅供参考,这些条目可在GCP控制台的API和服务凭据下查看)。

    12. 删除整个 oauth_client 标记并替换为 "oauth_client": [ { "client_id": "<your_new_client_id>", "client_type": 3 } ], 如果您需要任何其他oauth客户端,那么请确保白名单上的客户端位于顶部,因为这似乎是默认的。

    13. &保存文件;复制到您的android应用程序模块中。

    14. 确保您具有以下依赖项:

      • 项目根版本。格拉德尔
      • 类路径的com。谷歌。gms:谷歌服务:4.0.0'
      • 应用程序模块构建。格拉德尔
      • 编译com。谷歌。firebase:firebase核心:16.0.0'
      • 编译com。firebaseui:firebase ui验证:4.0.0'
    15. &生成;运行项目

    如果出现此错误(没有进一步的详细信息): BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion?alt=proto&key=AIzaSyBJL6EO8vMEJpyWUCAKP8ZgH4LYR0Hrwpk

    检查您的gradle Dependencies是否设置为上述版本(或更高版本)

    如果出现此错误: com.google.firebase.FirebaseException: An internal error has occurred. [ Invalid Idp Response:the Google id_token is not allowed to be used with this application. Its audience (OAuth 2.0 client ID) is <your-client-id>, which is not authorized to be used in the project with project_number: <your-project-number>. ]

    尝试删除(&M);在firebase控制台上重新添加您的白名单客户端id。