我正在编写一个Google App Engine应用程序以及一个CLI客户端,一个Android客户端和一个Javascript客户端.此应用程序的目的是允许用户通过CLI或Javascript客户端控制安装了Android客户端的Android手机.
身份验证起着至关重要的作用,因为错误可能允许恶意用户控制其他人的手机.
Android客户端是编写和工作的.它使用此方法对用户进行身份验证.基本上,这给了我一个所谓的SACSID令牌,我可以存储在cookie中.设置此cookie后,App Engine会识别我的用户.然后,服务器应用程序可以调用UserService以获取要调用getUserId()的用户.getUserId()返回一个标识我的用户的不透明字符串.到现在为止还挺好.
现在我正在编写JS和CLI客户端.由于CLI客户端没有显示CAPTCHA或打开浏览器的可靠方法,我认为它需要使用Device API("客户端登录"不是一个选项).此API需要使用OAuth 2进行身份验证.此外,我希望JS客户端访问用户的联系人,这似乎也表明OAuth 2适合.
如果我的用户使用OAuth 2进行身份验证,我是否会以某种方式将此Google OAuth 2令牌转换为Android客户端连接时获得的相同opaque字符串?如果没有,我可以修改我的Android应用程序,以便它使用OAuth而不是Sacsid令牌吗?
更具体地说,我看到有三件事可以解决我的问题:
与第三种可能解决方案类似的东西是从OAuth和SACSID令牌中获取用户的电子邮件地址,并将其用作用户ID.这对我来说看起来有点笨拙: