如何允许移动应用使用Facebook和Google登录以访问GAE上的网络服务?

15 浏览
0 Comments

如何允许移动应用使用Facebook和Google登录以访问GAE上的网络服务?

这与我关于是否需要创建Facebook应用程序的另一个问题有关。

我一直在阅读关于如何最好地为使用我的运行在Google App Engine上的Web服务的移动应用程序用户(iOS和Android)提供登录的方法。我仍然不清楚如何最好地做到这一点,因为我想提供Google和Facebook的登录。该应用程序和Web服务除了我想要在其上登录之外,与Facebook或Google无关。

只使用Google登录GAE非常简单,使用OpenIDConnect也是一样的。不幸的是,Facebook不支持这一点。

在Stack Overflow上阅读一个有关这个问题的旧问题,有人想要做与我相同的事情,看起来好像应用程序应该使用Facebook登录,然后获取一个令牌传递给我的后端,后端需要通过联系Facebook进行验证。现在是这样做的吗?

我还找到了Google Identity Toolkit,这似乎是我需要的。然而,我没有网站,只有应用程序。我需要应用程序进行Facebook登录,并以某种方式向我的Web服务提供一些东西,以便它可以验证登录信息。

稍后,应用程序用户应该能够使用Facebook、Google和我的自定义用户名/密码进行登录。应用程序和Web服务应该知道用户已登录并授权其访问REST API。

我如何实现这一点?顺便说一句,我在GAE上使用Go。

如果有人能够解释是否有几种选项来完成这个任务,以及优缺点,并提供最佳方法的概述和需要做的事情,我将非常感激。

非常感谢任何对此的帮助!

更新

好的,非常感谢大家的帮助和指引。我已经成功地在我的GAE后端上运行了iOS的快速入门示例应用程序。基本上,我在GAE上的Web服务上创建了一个Facebook应用程序和权限凭据,以便示例iOS应用程序可以登录。

在有身份验证的用户进入数据存储之前,还有一些差距,可以授权后续的API调用。

此时主要的开放问题是:

  1. 在成功的Facebook或Google登录后,如何在iOS应用程序中获取gtoken?
  2. 我应该显式地调用我的Web服务上的API来传入gtoken,还是这在启用Gitkit API时会自动完成?

感谢任何帮助!

0
0 Comments

问题的原因是需要让移动应用程序使用Facebook和Google进行登录,以便访问GAE上的Web服务。解决方法是使用Google Identity Toolkit(GIT)。GIT本身是一个身份提供者,可以与应用程序和后端集成。流程如下:

- 应用程序通过其GIT API请求登录

- GIT将通过Facebook或其他第三方提供商执行联合登录(对于应用程序来说是透明的),并将GIT令牌返回给应用程序(表示来自系统端到端的唯一用户,即应用程序加上后端)

- 应用程序向后端发出请求,并传递GIT令牌

- 后端验证GIT令牌的有效性,并从中提取用户的身份,从而验证请求

可以在后端端点文档中找到有关后端令牌验证的更详细信息,特别是查找以下部分:

- 了解Identity Toolkit cookie/token

- 获取用户信息

现在,在后端上进行实际的令牌验证可能需要几秒钟的时间,因此对于每个REST请求来说,这样做可能不实际。如果是这样,你需要以某种方式:

- 在应用程序和后端之间保存用户已验证的信息,例如通过一个类似于“会话”的方式进行管理

- 将后端接收到的特定REST请求映射到特定的已验证“会话”

但是我不确定在应用程序+后端上下文中如何实现这个“会话”功能,因为我还没有编写过任何应用程序。

感谢详细的答案,非常好,并验证了我的一些想法。

0
0 Comments

如何允许移动应用程序使用Facebook和Google登录以访问GAE上的Web服务?

在这个问题中,用户有一个应用程序和一个在GAE上的后端。如果用户使用Google身份工具包,它将允许用户使用Facebook、Google和电子邮件/密码进行登录。当用户成功使用身份工具包登录到应用程序时,服务器将接收到一个gtoken。这里有两个选择:

1. 将gtoken传递给应用程序并在应用程序中保存。当应用程序调用后端的API时,应该将gtoken附加到每个请求上。后端应该验证需要授权的每个API的gtoken(https://developers.google.com/identity/toolkit/web/required-endpoints)。

2. 验证gtoken,生成一个后端可以识别/标识用户的令牌。然后将令牌传递给应用程序,其他步骤与选项1相同。

如果不想使用身份工具包,可以在应用程序/后端上实现Facebook登录,并使用Facebook令牌在应用程序和后端之间通信。无论选择哪种方式,使用API的应用程序都应该传递给后端一些可以识别/授权用户的内容。

根据问题中的描述,似乎不希望传递gtoken,因为验证过程较重,而且也不希望传递Facebook令牌,因为希望有一个联合登录。因此,选项2似乎是最好的选择。

0