摘要:我正在尝试使用 Android 应用程序上存储的 Google 帐户来验证本机应用程序中的用户,并使用 Rails 3 + Devise 应用程序提供的 API,但我被卡住了。
详细信息:我们有一个应用程序 (http://push-poll.com),它可以让用户从一群朋友那里收集反馈。我们还构建了一个原生 Android 应用程序。我们的网络应用程序允许您使用您的 Google 帐户登录,我们希望将该功能扩展到本机 Android 应用程序。Web 应用程序通过 Devise(用于帐户权限)+ Omniauth(用于 Google 帐户信息和 OAuth 交互)来完成此操作。
版本:Android 2.1+、Rails 3.2.2、Devise 2.1.2、Omniauth 1.1.0
建议的身份验证工作流程:
- 用户在 Android 应用程序上点击“使用 Google 帐户登录”
- 用户使用 AccountManager 在 Android 设备上选择一个存储的帐户并授予权限
- Android 应用程序将 Google 帐户令牌发送到 Rails API
- Rails 应用程序将帐户令牌发送到 Google OAuth API <--这是我卡住的地方
- 谷歌返回成功和帐户信息(具体来说,姓名+电子邮件)
- Rails 应用程序通过电子邮件地址查找/创建用户
- Rails 应用程序从用户帐户创建/读取/更新访问令牌
- Rails 访问令牌重新调整到 Android 应用程序(这是我们的应用程序当前使用标准登录处理 api 访问的方式)
- Android 应用在所有 API 调用中都包含 Rails 访问令牌
我已经搜索了 Google 的文档,但我完全坚持 (4) 和 (5)。一旦我有了 Google 提供的电子邮件地址,一切都会像现在一样正常运行(对于标准登录或 Google/Omniauth/Devise 帐户)。根据我的最佳猜测,这可以通过以下任一方法解决:
- 为与网络应用程序共享的 Android 应用程序创建一个 API/密钥,以便向 Google Accounts API 发出请求
- 找到一个 Google API 端点,我可以简单地验证一个 Android 帐户令牌并返回帐户详细信息
至少一个星期以来,我一直在用头撞墙。
仅供参考:我是 Web 开发人员,我们的 Android 开发人员非常友好地为我提供了一个已删除的 Android 应用程序,该应用程序会将访问令牌从 Android 发送到我选择的 API 端点。