我的服务器如何使用Google帐户验证Android用户?

时间:2012-05-25 19:03:23

标签: android authentication android-c2dm google-cloud-messaging

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

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

Oath2.0是否适用于此,或者Oath2.0仅用于手机与Google服务之间的直接身份验证?

2 个答案:

答案 0 :(得分:2)

您没有提到要在服务器中使用的语言代码。

使用C2DM的更简单方法是在Google App Engine中使用本地支持与C2DM的Android集成。

如果情况并非如此(EX:您在自己的服务器中使用php),我会看看AccountManager,它可以为您提供身份验证令牌(应用程序用户必须允许它)。

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

:)

答案 1 :(得分:0)

我认为你现在必须得到你的查询的答案。但我仍然会回答这个问题,以帮助其他有兴趣实现此类目标的用户。

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

  1. 使用两个组件在Google Cloud Console中创建项目(通过单击&#34创建组件;在左窗格中选择API $ Auth> Credetials"选项)。第一个组件将是您的Web组件(例如Web服务),第二个组件是您的Android应用程序。
  2. 通过传递当前上下文,电子邮件ID(使用客户经理查询)和范围为("受众:服务器:client_id)执行GoogleAuthUtil.getToken()方法,尝试通过在Android应用中查询客户经理来获取访问令牌:&#34)
  3. "客户ID"在Google Cloud Console上创建的项目下可用的Web组件的参数。
  4. 该方法将返回编码为JSON Web令牌或JWT的ID令牌。
  5. 此ID标记应用程序在服务器上验证用户所需的所有内容。
  6. ID令牌包含以下参数
  7. iss:always accounts.google.com

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

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

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

    1. 通过https(必填)将此令牌传递到您的网络组件(例如网络服务),其中已存储了网络组件和Android组件客户端ID。

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

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

    4. 注意:Android上的ID令牌只能通过执行GoogleAuthUtil.getToken()获取,如果它是在Google云端控制台上的项目下创建Android组件时指定的相同证书所签署的相同应用程序。

      可以在" https://developers.google.com/accounts/docs/CrossClientAuth"

      上找到更多信息