我的服务器如何通过Android用户的Google帐户进行身份验证?

我的服务器如何通过Android用户的Google帐户进行身份验证?,android,authentication,android-c2dm,google-cloud-messaging,Android,Authentication,Android C2dm,Google Cloud Messaging,我正在构建一个Android应用程序,作为客户端/服务器架构的一部分,我的服务器将向Android客户端提供服务。该服务器不会与任何谷歌服务器通信,但需要通过其gmail帐户对用户进行身份验证。也就是说,服务器需要确保来自手机的http(s)请求确实来自拥有特定gmail帐户的人 我正在研究Android的C2DM框架,我当然可以使用它来来回传递与服务相关的数据,但我如何在Android手机和第三方(非谷歌)服务器之间使用谷歌账户认证呢 Oath2.0是否适用于此,或者Oath2.0是否仅用于手

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

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


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

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

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

如果不是这样的话(例如:您在自己的服务器中使用php),我会看看哪个可以为您提供auth令牌(应用程序用户必须允许)

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


:)

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

因此,要使用google帐户访问令牌针对您自己的服务对您的应用程序用户进行身份验证和授权,您必须遵循以下步骤

  • 在Google云控制台中创建一个包含两个组件的项目(通过单击左窗格上的“APIs$Auth>Credetials”选项创建组件)。第一个组件是您的web组件(例如web服务),第二个组件是您的android应用程序
  • 通过将当前上下文、电子邮件id(使用帐户管理器查询)和作用域作为(“受众:服务器:客户端id:”)传递,执行GoogleAuthUtil.getToken()方法,在android应用程序中查询帐户管理器,尝试获取访问令牌
  • 其中是在Google云控制台上创建的项目下可用的web组件的“客户端ID”参数
  • 该方法将返回编码为JSON web令牌或JWT的ID令牌
  • 此ID标记应用程序对服务器上的用户进行身份验证所需的所有内容
  • ID令牌由以下参数组成
  • iss:always accounts.google.com

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

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

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

  • 通过https(强制)将此令牌传递给您的web组件(例如web服务),其中已存储web组件和Android组件客户端id

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

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

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


    更多信息可以在“

    上找到,我看不出实现语言在这里有多重要——问题是关于技术和协议的,不是吗?据我所知,C2DM没有提供任何机制来验证Google帐户。C2DM已经被弃用,取而代之的是Google云消息。见我的亲戚。