我正在编写一个 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 吗?
更具体地说,我看到三件事可以解决我的问题:
- 从客户经理处获取 OAuth 2 token 的方法
- 用 OAuth 2 token 交换 SACSID token 的方法
- 一种通过 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/