2011-12-01 25 views
7

我正在编写一个Google App Engine应用程序以及一个CLI客户端,一个Android客户端和一个Javascript客户端。此应用程序的目的是允许用户使用CLI或Javascript客户端来控制安装了Android客户端的Android手机。在Google App Engine上,我可以将使用Android AccountManager的Google OAuth 2令牌和SACSID令牌关联起来吗?

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

Android客户端编写和工作。它使用this method对用户进行身份验证。基本上,这给我一个所谓的SACSID令牌,我可以存储在一个cookie中。当设置此Cookie时,App Engine会识别我的用户。然后,服务器应用程序可以调用UserService以获取要在其上调用getUserId()的用户。 getUserId()返回一个标识我的用户的不透明字符串。到现在为止还挺好。

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

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

更具体地讲,我认为这将解决我的问题三件事情:

  1. 从客户经理获取OAuth 2令牌的方式
  2. 一个交换的OAuth 2令牌的方式SACSID令牌
  3. 使用SACSID令牌和OAuth2获取相同的不透明用户ID的方式,但只有在同一应用程序上同时具有两个身份验证系统时才是如此。

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

  • 每当我收到一个OAuth 2的要求,我需要打电话给谷歌API来获取用户的电子邮件地址(或建立自己的令牌系统,这似乎是不安全的,并介绍许多其他困难)。
  • 给定用户的电子邮件地址可能会发生变化,使我失去用户与其以前的数据之间的关联。

回答

相关问题