4

我正在开发一个 Android 应用,我希望用户使用 Google+ 登录来登录我的应用。

目前,我在 PHP 登录脚本中传递了从 Google+ 获得的用户名。该脚本使用用户 ID 加载一个新会话。

目前,该站点高度不安全:任何知道其他用户用户名的人都可能以他们的身份登录。

执行此操作的安全方法是什么?

如何授权用户访问我的服务器?

在我看来,Google+ 纯粹是一个社交网络 API……

4

2 回答 2

18

Google+ 登录使用 OAuth 2.0 - 这意味着用户不会直接通过您的服务器进行身份验证。相反,他们通过 Google 进行身份验证并获得由 Google 签名的令牌。您的应用程序获取该令牌(来自 Android 上的 Google Play 服务)并将其传递到您的服务器,作为用户通过 Google 进行身份验证的证明。然后,您将用户 Google+ ID 与您自己服务器上的新用户 ID 或现有用户 ID 相关联。因此,只要用户可以证明他们已针对特定 Google+ 用户 ID 通过 Google 进行了身份验证,您就将他们视为在您自己的服务器上进行了身份验证。

要实施,您有几个选项,具体取决于您构建系统的方式:

  1. 当您只想向您自己的服务器验证您的用户时:在 Android 设备上,您的用户通常已经通过 Google 验证,因为他们在帐户管理器中有一个 Google 帐户。您的应用程序可以利用这一点并在帐户管理器中为用户获取令牌,而无需输入任何密码。用户在您的应用中点击“使用 Google 登录”后,您可以为他们获取 ID 令牌并将其GoogleAuthUtils.getToken()传递到您的服务器。您的服务器在验证 Google 签名后,可以安全地将用户会话与适当的用户帐户和权限相关联(即,将会话视为经过身份验证)。Tim BrayIan Barber讨论了获取令牌和验证它的过程。
  2. 如果您想向您自己的服务器验证用户身份并从您的服务器进行 Google+ API 调用:那么您应该查看developers.google.com 上的服务器端流程文档。这采用与选项一相同的方法,但此外,当用户第一次登录时,Android 应用程序会请求授权码而不是 ID 令牌。服务器可以将其交换为访问令牌和刷新令牌——反过来,您的服务器可以使用这些令牌代表用户进行 API 调用,例如,通过使用PHP 客户端库
  3. 如果您想向您自己的服务器验证用户身份,但还要从 Android 设备进行 Google API 调用:那么您应该使用 Google Play 服务提供的 PlusClient来进行 Google API 调用,以及验证用户身份的步骤与您自己的服务器。

例如,您可能希望在您的客户端或服务器上进行 Google API 调用,以便您可以使用来自用户 Google+ 个人资料的数据预先填充您的注册表单。

于 2013-07-12T09:33:03.213 回答
0

Google Plus 使用 OAuth 2.0 https://developers.google.com/+/api/oauth

它具有身份验证令牌。您可以使用身份验证令牌从 Android 或服务器访问 Google Plus。在服务器上,您可以通过使用该令牌访问 Google 来验证令牌。

于 2013-07-11T21:26:25.883 回答