我正在开发一个 Android 应用程序,我希望用户使用 Google+ 登录来登录我的应用程序。
目前,我在 PHP 登录脚本中传递从 Google+ 获得的用户名。该脚本使用用户 ID 加载新会话。
目前,该网站非常不安全:任何知道其他用户用户名的人都可能以他们的身份登录。
什么是安全的方法来做到这一点?
如何授权用户访问我的服务器?
在我看来,Google+ 纯粹是一个社交网络 API...
Google+ 登录使用 OAuth 2.0 - 这意味着用户不会直接向您的服务器进行身份验证。相反,他们向 Google 进行身份验证并获取由 Google 签名的令牌。您的应用程序获取该令牌(来自 Android 上的 Google Play 服务),并可以将其传递到您的服务器,作为用户通过 Google 进行身份验证的证据。然后,您可以将用户的 Google+ ID 与您自己的服务器上的新用户 ID 或现有用户 ID 相关联。因此,只要用户可以证明他们已针对特定 Google+ 用户 ID 通过 Google 进行了身份验证,您就将其视为在您自己的服务器上进行了身份验证。
要实施,您有几种选择,具体取决于您构建系统的方式:
-
当您只想向您自己的服务器验证用户身份时:在 Android 设备上,您的用户通常已经通过 Google 身份验证,因为他们在帐户管理器中拥有 Google 帐户。您的应用程序可以利用这一点并在帐户管理器中为用户获取令牌,而无需他们输入任何密码。用户在您的应用中点击“使用 Google 登录”后,您可以使用以下方法为他们获取 ID 令牌
GoogleAuthUtils.getToken()
并将其传递到您的服务器。您的服务器在验证 Google 签名后,可以安全地将用户会话与适当的用户帐户和权限关联起来(即,将会话视为经过身份验证)。获取令牌并验证它的过程由以下讨论蒂姆·布雷在这里 http://www.tbray.org/ongoing/When/201x/2013/04/04/ID-Tokens and by 伊恩·巴伯在这里 http://www.riskcompletefailure.com/2013/07/google-sign-in-multiple-applications-in.html.
-
如果您想向您自己的服务器验证用户身份并从您的服务器进行 Google+ API 调用: 那你应该看看服务器端流程 https://developers.google.com/+/mobile/android/sign-in#server-side_access_for_your_appDevelopers.google.com 上的文档。这采用与选项一相同的方法,但此外,当用户第一次登录时,Android 应用程序会请求授权代码而不是 ID 令牌。服务器可以将其交换为访问令牌和刷新令牌 - 反过来,您的服务器可以使用这些令牌代表用户进行 API 调用,例如,通过使用PHP 客户端库 https://code.google.com/p/google-api-php-client/.
-
如果您想向您自己的服务器验证用户身份,还可以从 Android 设备进行 Google API 调用: 那你应该使用PlusClient https://developers.google.com/+/mobile/android/sign-in除了使用您自己的服务器对用户进行身份验证所采取的步骤之外,Google Play 服务还提供了进行 Google API 调用的功能。
例如,您可能希望在客户端或服务器上进行 Google API 调用,以便可以使用用户 Google+ 个人资料中的数据预先填充注册表单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)