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

Posted

技术标签:

【中文标题】在 Google App Engine 上,我可以关联使用 Android 的 AccountManager 获得的 Google OAuth 2 令牌和 SACSID 令牌吗?【英文标题】:On Google App Engine, can I relate a Google OAuth 2 Token and a SACSID token I got using Android's AccountManager? 【发布时间】:2012-01-10 15:24:57 【问题描述】:

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

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

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

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

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

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

    从客户经理获取 OAuth 2 令牌的方法 一种将 OAuth 2 令牌交换为 SACSID 令牌的方法 一种使用 SACSID 令牌和 OAuth2 获取相同不透明用户 ID 的方法,但前提是我可以在同一应用程序上同时拥有这两个身份验证系统。

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

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

【问题讨论】:

【参考方案1】:

改用端点:

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

他们使用oauth2,它们易于实现并且支持android ios和Web。

【讨论】:

以上是关于在 Google App Engine 上,我可以关联使用 Android 的 AccountManager 获得的 Google OAuth 2 令牌和 SACSID 令牌吗?的主要内容,如果未能解决你的问题,请参考以下文章

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

有哪些库可以在 Google App Engine/Java Servlet 上处理 XML

在 Google-App-Engine 中使用 HSQLDB

在 Google App Engine 上按计划运行 python 脚本

在 Google App Engine 上打开 SQLite 数据库

如何在 Google Cloud App Engine 上运行 PHP 服务