1

我正在构建一个 Android 应用程序作为客户端/服务器架构的一部分,我的服务器将为 Android 客户端提供服务。该服务器不会与任何 Google 服务器通信,但需要通过用户的 gmail 帐户对用户进行身份验证。也就是说,服务器需要确保来自电话的 http(s) 请求确实来自具有该特定 gmail 帐户的人。

我正在研究 Android 的 C2DM 框架,我当然可以使用它来来回传递与服务相关的数据,但是如何在 Android 手机和第三方(非 Google)服务器之间使用 Google 帐户身份验证?

Oath2.0 会为此工作,还是 Oath2.0 仅用于手机和 Google 服务之间的直接身份验证?

4

2 回答 2

2

您没有提到您将在服务器中使用哪种语言代码。

使用 C2DM 的更简单方法是在 Google App Engine 内部,它提供了对 Android 与 C2DM 集成的原生支持。

如果不是这种情况(例如:您在自己的服务器中使用 php),我会看看AccountManager,它可以为您提供身份验证令牌(应用用户必须允许它)。

向您的 C2DM 服务器注册新设备时,您还需要设备与令牌进行通信,这样您就可以通过服务器和 Google 服务器之间的连接了解用户是否真的是该 gmail 帐户的所有者。

:)

于 2012-05-25T19:26:46.693 回答
0

我想你现在一定已经得到了你的问题的答案。但我仍然会回答这个问题,以帮助其他有兴趣实现类似目标的用户。

因此,要使用 google 帐户访问令牌对您的应用用户进行身份验证和授权,您必须按照以下步骤操作。

  1. 在 Google Cloud Console 中创建一个包含两个组件的项目(通过单击左侧窗格上的“APIs $ Auth >Credentials”选项创建组件)。第一个组件将是您的 Web 组件(例如 Web 服务),第二个组件是您的 android 应用程序。
  2. 尝试通过传递当前上下文、电子邮件 id(使用帐户管理器查询)和范围为(“audience:server:client_id:”)来执行 GoogleAuthUtil.getToken() 方法,通过在 android 应用程序中查询帐户管理器来获取访问令牌。
  3. 在 Google Cloud Console 上创建的项目下可用的 Web 组件的“客户端 ID”参数在哪里。
  4. 该方法将返回编码为 JSON Web 令牌或 JWT 的 ID 令牌。
  5. 此 ID 令牌是应用程序在服务器上对用户进行身份验证所需的一切。
  6. ID 令牌由以下参数组成

问题:总是accounts.google.com

aud:项目的web组件的客户端ID

azp:项目的Android应用组件的客户端ID

电子邮件:标识请求令牌的用户的电子邮件,以及其他一些字段。

  1. 通过 https(强制)将此令牌传递给您的 Web 组件(例如 Web 服务),其中 Web 组件和 Android 组件客户端 ID 已经存储。

  2. 在服务器上解码接收到的 JWT ID 令牌后,检查令牌的“aud”参数和存储的 Web 组件客户端 ID 是否相等,从而对用户进行身份验证。

  3. 可以通过读取 JWT ID 令牌的 email 参数来获取用户身份,该参数指定在执行 GoogleAuthUtil.getToken() 方法时提供的用于访问 android 应用程序中的 Id 令牌的电子邮件 ID。

注意:android 上的 ID 令牌只能通过执行 GoogleAuthUtil.getToken() 来获取,前提是它是由在 Google Cloud Console 上的项目下创建 android 组件时指定的相同证书所指定的相同应用程序。

更多信息可以在“ https://developers.google.com/accounts/docs/CrossClientAuth ”上找到

于 2014-01-24T12:49:10.777 回答