我的应用程序的结构如下:我有一个Web服务(在GAE上运行,与该问题不太相关),并且该服务包含的数据可通过网站以及移动和桌面应用程序获得。

目前,用户通过Google ClientLogin向网站进行身份验证,而应用程序通过GAE内置的oauth提供商进行身份验证/获得授权。 (OAuth在这里主要用于身份验证,除了用户的唯一ID和电子邮件地址,我的应用程序实际上并未通过OAuth使用任何外部数据。)

我想做的是扩大用户可用于登录的服务数量。由于应用程序的复杂性,似乎我需要OAuth。但是我无法真正正确地概念化这种流程。

让我们以Facebook为例。当移动应用程序通过Facebook oauth流程并获取访问令牌时,这还不够-因为它实际上是我的服务而非应用程序,实际上需要与Facebook进行对话以检索联系信息和唯一的用户ID。这使我认为OAuth流程需要在我的服务而不是移动应用程序的上下文中发生。然后,我的服务成为使用者,Facebook成为oauth提供者,并且该服务将保留oauth访问令牌,这是在用户首次设置其帐户时发生的。

如果这是正确的方法,那么在哪里对应用程序进行身份验证?当用户已经有一个帐户并安装了移动应用程序的新实例时,会发生什么?我想还要经历oauth流程,将凭据与我的服务已经存储的数据进行匹配,然后从服务向应用程序发布我自己的“访问令牌”,以授权该应用程序实例。这似乎令人费解和骇人听闻。

我敢肯定,我不是唯一会“借用”具有后端的移动应用程序的第三方帐户系统的人,但是我真的不知道这样做的正确方法是什么。

我没有看到什么和/或在概念上出错了?

最佳答案

回到大学后,我和一些同事曾经做过一个性质非常相似的项目。我们使用他们各自的OAuth API通过Facebook或Foursquare对用户进行了身份验证。

应用程序的本机Android版本使用OAuth提供程序的开始页面打开了WebView,该页面在身份验证后重定向回我们的服务。然后,我们的服务从OAuth提供程序请求了OAuth令牌(Foursquare有一些pretty simple instructions)。收到令牌后,我们就可以使用Cookie来建立会话,可以从应用程序中访问它。

为了验证会话,我们只是检查了访问令牌对于提供者是否仍然有效。我们还使用了各自提供商的唯一用户ID来区分用户。

是的,对我们有用的是:使应用程序认证和授权您的服务,而不是应用程序本身。

关于authentication - 如何通过oauth与第三方授权移动应用程序但要连接到我的服务而不是第三方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7996124/

10-13 07:20
查看更多