通过 Android 应用程序安全地使用 Google Plus 登录 Web 应用程序

2024-04-19

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

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

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

什么是安全的方法来做到这一点?

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

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


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 签名后,可以安全地将用户会话与适当的用户帐户和权限关联起来(即,将会话视为经过身份验证)。获取令牌并验证它的过程由以下讨论蒂姆·布雷在这里 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.
  2. 如果您想向您自己的服务器验证用户身份并从您的服务器进行 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/.
  3. 如果您想向您自己的服务器验证用户身份,还可以从 Android 设备进行 Google API 调用: 那你应该使用PlusClient https://developers.google.com/+/mobile/android/sign-in除了使用您自己的服务器对用户进行身份验证所采取的步骤之外,Google Play 服务还提供了进行 Google API 调用的功能。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Android 应用程序安全地使用 Google Plus 登录 Web 应用程序 的相关文章

  • 使用mac或windows的QPython开发环境

    刚接触QPython 没有找到任何参考资料 最终在 Mac 或 PC 上进行开发 在 Android 设备上部署代码 与在 Android 设备上开发代码本身相比 这似乎非常尴尬 特别是对于较大的项目 我希望使用 普通 IDE 例如 Int
  • HttpURLConnection 发送图像、音频和视频文件,参数可以是(String 或 Json String)Android

    我正在分享solution发送一个image audio or a video带有参数的文件使用HttpURL连接 参数可以是 纯字符串或 JSON Android 客户端到 PHP 后端 设想 必须上传媒体文件 带参数的音频 视频和图像
  • 在 Android 中向下滚动列表视图时强制关闭

    当我尝试在片段活动中向下滚动列表视图时 出现强制关闭错误 其中有 1 个图像视图和 2 个文本视图 我是android的初学者 所以除了android最常用组件的基本场景之外没有太多的知识 没有位图 OOM 错误 因为我也没有使用图像进行了
  • 使用 BroadcastListener 通话结束后从 Calllog 中获取通话持续时间

    我需要尝试在通话结束后获取通话持续时间 我有一个广播侦听器 它使用电话管理器跟踪电话状态 即 摘机 空闲 等 使用此接收器 我可以了解拨出呼叫何时完成 通话完成后 我启动一项服务来获取上次通话的通话持续时间 但是 我得到的值是前一个调用的值
  • 在Android市场发布测试版

    我想要publish a 测试版我在 Android 市场上的一些应用程序 面临着我无法两次上传具有相同包名的应用程序的问题 即使使用不同的证书也是如此 但是发布版和测试版有 2 个包名会带来很多麻烦 例如每次都必须更改对 R 不同位置的引
  • 当应用程序崩溃时,Android Studio ADB 会清除 logcat 文件!哦美伊

    刚刚升级了最新的Android Studio 现在 当应用程序崩溃时 日志文件 adb logcat 就会消失 它不仅停止记录整个日志似乎突然被删除了 对于调试来说不太酷 我需要设置日志缓存大小或其他什么吗 还注意到调试器需要很长时间来收集
  • android webview溢出无法禁用

    我在 android webview 中有一个本地页面 页面的html and body两者都有width 100 height 100 overflow hidden 以及 result popup wrap有以下CSS result p
  • 从片段调用片段

    我想通过单击当前片段中的按钮来调用当前片段中的另一个片段 这是我的主要活动 import android app FragmentManager import android os Bundle import android support
  • 尝试将 AndroidX 迁移到 Android AppCompat

    从 AndroidX 迁移到 Appcompat 时出现错误 这是日志构建 Manifest merger failed Attribute application appComponentFactory value android sup
  • 在Android中获取Fragment中的应用程序上下文?

    我已通过在一个活动中使用应用程序上下文将一些数据存储到全局类中 稍后我必须在片段中检索这些值 我已经做了类似的事情来存储在全局类中 AndroidGlobalClass AGC AndroidGlobalClass getApplicati
  • 将列表视图项转换为单个位图图像

    参考这个主题 Android 获取所有 ListView 项目的屏幕截图 https stackoverflow com questions 12742343 android get screenshot of all listview i
  • Android 中的 Sqlite 全文搜索对非英语字符的 Unicode 支持

    滚动到末尾以跳过说明 背景 在我的 Android 应用程序中 我想使用非英语 Unicode 文本字符串来搜索存储在 SQLite 数据库中的文本文档 字段中的匹配项 我了解到 所以我认为 我需要做的是实施一个使用 fts3 fts4 进
  • 如何从github项目获取jar? [复制]

    这个问题在这里已经有答案了 我想使用官方网站上的 kSoap2 android 库http simpligility github io ksoap2 android index html http simpligility github
  • 从 Android 应用程序调用 Google 地图应用程序以获取行车方向

    我需要使用外部谷歌地图应用程序显示行车方向我找到了这个链接http developer android com guide appendix g app intents html http developer android com gui
  • Android 有类似 mechanize 这样的工具吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在创建一个 Android 应用程序 它必须在后台进行一些网上冲浪 以便为用户提供服务 我必须连接
  • 为什么我在模拟器中看不到视频?

    我见过几个与此类似的问题 但我想确定一下 我无法在模拟器上运行视频 是否一致 有人在模拟器上成功运行视频吗 以下是我使用的代码 import android app Activity import android net Uri impor
  • 使用 Android API 发布推文

    我一直在寻找一种使用 Android 应用程序发布推文的方法 但我发现的所有方法都不起作用 我不得不承认 Twitter 的 API 并不是那么容易理解 但是我的代码并不长 而且我看不出我的错误在哪里 这是我的代码 public class
  • 如何移动随 Visual Studio 2017 安装的 Android SDK 文件夹?

    我已将 VS 2017 安装在其默认路径 C 驱动器 中 但由于 Android 文件夹较大 它耗尽了我的大部分驱动器空间C Users USERNAME Local Android 该文件夹是由 VS 2017 安装程序自动创建的 如何将
  • Android 数据库(SQLite)从空表返回非空游标

    我使用 SQLite 数据库浏览器验证该表不包含任何行 我单步执行查询生成器代码来获取生成的查询 并在 SQLite 数据库浏览器中运行该查询 查询返回零行 但是 Android 的 SQLiteQueryBuilder query 方法返
  • 如何在react-native应用程序中禁用屏幕截图?

    我已经使用react native制作了一个移动应用程序 目前只有android 它不是博览会应用程序 我想禁止用户在应用程序打开时截取屏幕截图 我知道不可能完全禁用此功能 但我想让至少更难截取屏幕截图 我找到了一些例子 但我不知道如何实现

随机推荐