authentication - 如何通过 oauth 向第三方授权移动应用程序但连接到我的服务,而不是第三方

标签 authentication oauth authorization oauth-2.0

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

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

我想做的是扩大用户可以用来登录的服务数量。由于应用程序的复杂因素,我似乎需要 OAuth。但我无法真正正确地概念化这个流程应该如何进行。

让我们以 Facebook 为例。当移动应用程序通过 Facebook oauth 流程并获取访问 token 时,这还不够 - 因为它是我的服务,而不是应用程序,它实际上需要与 facebook 交谈以检索联系信息和唯一的用户 ID。这让我认为 OAuth 过程需要在我的服务上下文中发生,而不是在移动应用程序中发生。然后我的服务成为消费者,Facebook 成为 oauth 提供者,并且服务持有 oauth 访问 token ,这在用户第一次设置他们的帐户时发生。

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

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

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

最佳答案

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

该应用程序的原生Android版本打开了WebView使用 OAuth 提供者的起始页面,该页面在身份验证后重定向回我们的服务。然后我们的服务向 OAuth 提供者请求了 OAuth token (Foursquare 有一些 pretty simple instructions )。当我们获得该 token 时,我们使用 cookie 建立了一个 session ,我们可以从应用程序访问该 session 。

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

所以是的,对我们有用的是:让应用程序对您的服务进行身份验证和授权,而不是应用程序本身。

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

相关文章:

database - Django User "per project"组分配

php - Laravel Sanctum Token API 身份验证在 Postman 中不起作用

Android Google 登录 DEVELOPER_ERROR 10

php - Laravel Socialite + 登录后调用 API

java - OAuth中获取的RequestToken的有效性如何?

rest - 简单的 REST 身份验证

javascript - 用户登录后添加一些内容

node.js - 使用 Web3.js HttpProvider 调用 API 时如何向 Ankr 提供凭据?

authentication - 我可以在获取 chrome 身份 token 之前选择用户吗?

php - 使用 PIN 码将用户登录到 Laravel