android - 在 Google App Engine 上,我可以关联 Google OAuth 2 token 和使用 Android 的 AccountManager 获得的 SACSID token 吗?

标签 android security google-app-engine oauth-2.0

我正在编写一个 Google App Engine 应用程序以及一个 CLI 客户端、一个 Android 客户端和一个 Javascript 客户端。此应用程序的目的是允许人们通过使用 CLI 或 Javascript 客户端来控制安装了 Android 客户端的 Android 手机。

身份验证起着至关重要的作用,因为错误可能会让恶意用户控制他人的手机。

Android 客户端已编写并可运行。它使用 this method 对用户进行身份验证.基本上,这为我提供了一个所谓的 SACSID token ,我可以将其存储在 cookie 中。设置此 cookie 后,App Engine 会识别我的用户。服务器应用程序然后可以调用 UserService 来获取要调用 getUserId() 的用户。 getUserId() 返回一个不透明的字符串来标识我的用户。到目前为止一切顺利。

现在我正在编写 JS 和 CLI 客户端。 因为 CLI 客户端没有显示验证码或打开浏览器的可靠方式,我想它需要使用 Device API (“客户端登录”不是一个选项)。此 API 需要使用 OAuth 2 进行身份验证。另外,我希望 JS 客户端访问用户的联系人,这似乎也表明 OAuth 2 是合适的。

如果我的用户使用 OAuth 2 进行身份验证,我是否能够以某种方式将此 Google OAuth 2 token 转换为我在 Android 客户端连接时获得的相同不透明字符串?如果没有,我可以修改我的 Android 应用程序,使其使用 OAuth 而不是 Sacsid token 吗?

更具体地说,我看到三件事可以解决我的问题:

  1. 从客户经理处获取 OAuth 2 token 的方法
  2. 用 OAuth 2 token 交换 SACSID token 的方法
  3. 一种通过 SACSID token 和 OAuth2 获得相同不透明用户 ID 的方法,但前提是我可以在同一应用程序上同时拥有这两种身份验证系统。

似乎与第三种可能的解决方案类似的是从 OAuth 和 SACSID token 中获取用户的电子邮件地址,并将其用作用户 ID。然而,这对我来说看起来有点笨拙:

  • 每次我收到 OAuth 2 请求时,我都需要调用 Google API 来检索用户的电子邮件地址(或者构建我自己的 token 系统,这似乎不安全并引入了许多其他困难)。
  • 给定用户的电子邮件地址可能会发生变化,这让我失去了用户与其之前数据之间的关联。

最佳答案

改用端点:

https://developers.google.com/appengine/docs/java/endpoints/

他们使用oauth2,他们很容易实现并且支持android IOS和Web。

关于android - 在 Google App Engine 上,我可以关联 Google OAuth 2 token 和使用 Android 的 AccountManager 获得的 SACSID token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8342096/

相关文章:

java - 使用 addAsync 对 App Engine 中的延迟任务进行单元测试

java - 如何根据给编辑 TextView 的计数值动态实现线性布局的代码

android - Cordova App sqlite 数据库查看器在运行时应用程序测试,如 Web SQL

security - SSL 中如何使用信任库和 keystore ?

ruby-on-rails - 如何防止 Rails 用户意外验证为错误的用户?

security - 您如何测试 SSL 客户端库是否正确验证了它所连接的服务器的证书?

谷歌应用程序引擎上的java首选项API

Android fragment 布局问题(垂直和水平居中按钮)

java - 单击 fragment 按钮时如何获取下一个 Activity

python - 为什么要从 Google App Engines 导入 urlfetch?