android - Google Identity Signin API 始终返回带有服务器客户端 ID 的 NULL

标签 android authentication oauth google-signin

[添加]

根据我遇到这个问题后的观察:我觉得这个问题要么是在处理......

  • 错误的服务器客户端 ID
  • 需要额外的编程,但不是开箱即用的(即应用引擎模块或服务器)

[原创]

我已经在 Google Sign-In Android Sample App 成功运行了样本. 我的问题涉及 2 个 Activity ...ServerAuthCodeActivity 和 IdTokenActivity。

我完成了创建 google-services.json 文件并将其放在正确位置的过程。当我运行该应用程序时,我能够成功使用所提供的 4 个 Activity 中的 2 个...

  • 登录 Activity :基本登录
  • 使用 Drive Activity 登录:基本登录加上 Drive Authentication
  • ID token Activity :从登录用户中检索 ID token
  • 服务器身份验证代码 Activity :从经过身份验证的服务器检索身份验证代码。

前两个例子效果很好; 然而,最后 2 个 Activity 只给我一个 null 结果。

在运行该应用程序之前,我注意到我需要在 strings.xml 中提供一个 server_client_id。我看到 google-services.json 有一个符合要求的 OAuth 客户端 ID(以 apps.googleusercontent.com 结尾),并将该客户端 ID 放在 strings.xml 文件。注意:我尝试在 Google Developer Console 中创建一个 Android OAuth 客户端 ID,但它指出我已经拥有该项目/包的 OAuth 客户端 ID。所以我认为 google-services.json 文件的客户端 ID 是正确的。

那么,这是正确的服务器客户端 ID 吗?还是我应该从其他地方获取该 ID?

编辑

这是我的 google-services.json 文件(压缩)

{

 "project_info": {
  ...
 },
 "client": [
   {
     "client_info": {
       ...
     },
     "oauth_client": [
       {
         "client_id": "*****.apps.googleusercontent.com", // HERE
         ...
       }
     ],
     ...
   }
 ],
 ...
}

这是登录后验证码的结果

最佳答案

包名称+签名证书 SHA1 唯一标识一个 Android 客户端。虽然包名称在 Google 的示例中是固定的,但您必须将其与您使用的签名证书一起注册(它可以来自您的调试 key 存储或用于测试的专用证书)

此外,Web 服务器需要在具有“Web”类型的 OAuth 客户端的同一个开发控制台项目中注册,并且您必须将该 oAuth 客户端的客户端 ID 粘贴到示例代码中。 - 从这个意义上说,你是对的,谷歌在这种情况下无法提供零附加代码的示例。

对于使用示例的其他人,您必须更改 strings.xml 以将您的“Web”类型 OAuth 客户端的客户端 ID 放在下面:

<string name="server_client_id">YOUR_SERVER_CLIENT_ID</string>

请注意,指定的 server_client_id 将是您可以传递给服务器的 id token 或服务器授权代码中的目标受众。在适当的验证后,您的服务器可以信任 token /代码。这比不记名 token 更安全。你也可以看看这篇博文: http://android-developers.blogspot.com/2016/01/using-google-sign-in-with-your-server.html

关于android - Google Identity Signin API 始终返回带有服务器客户端 ID 的 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34632238/

相关文章:

Android复杂按钮形状

javascript - React Stytch 尚未加载

ios - Dropbox 错误 OAuth 请求 "Error 403"

ios - AppDelegate 中未调用应用程序 openURL 函数

android - 根据宽高比加载不同的资源

Android Studio 2.0 定位系统镜像不一致

java - 添加基本​​身份验证时遇到问题

android - com.google.android.gms.auth.GoogleAuthException : Unknown

android - SQLite DB 和 ContentProvider 的最佳实践

java - 使用 Spring Boot 进行 session 管理?