OAuth2“社交登录”流程(允许通过 Facebook/Twitter 进行 OAuth2 身份验证):是不是有任何示例/文献?

Posted

技术标签:

【中文标题】OAuth2“社交登录”流程(允许通过 Facebook/Twitter 进行 OAuth2 身份验证):是不是有任何示例/文献?【英文标题】:OAuth2 "social login" flow (allow OAuth2 authentication via Facebook/Twitter): are there any examples/literature?OAuth2“社交登录”流程(允许通过 Facebook/Twitter 进行 OAuth2 身份验证):是否有任何示例/文献? 【发布时间】:2012-07-04 20:26:42 【问题描述】:

我正在为基于 Web 的自定义社交网络应用开发原生移动应用。我们正在构建一个 REST API 来与 Web 服务器进行通信,并且我们选择了 OAuth2 作为身份验证方法(grant_type=password 流程)。

网络应用程序允许用户使用外部服务(即 Facebook 和 Twitter)登录和注册。我们需要在移动应用程序上也允许这样做。问题是:我们怎样才能做到这一点?

Pinterest 移动应用程序能够管理这种情况(见附图)。这里使用的流程是什么?

它们的行为是否类似于支持 OAuth 的经典应用(移动应用直接通过 Facebook API 充当 OAuth 客户端?)。如果是这样,那么如何通过 Pinterest 服务器对移动应用进行身份验证?它是否将 Facebook OAuth 访问令牌作为凭据传递?

问题的图形表示(见????标记的箭头):

Website API                 Mobile app                    Facebook OAuth

  +                           +                               +
  |                           |                               |
  |                           |       /oauth2/token           |
  |                           +------------------------------>|
  |                           |                               |
  |                           |       OAuth Access Token      |
  |                           |<-----------------------------+|
  |                           |                               |
  |           ????            |                               |
  |- - - - - - - - - - - - - -|                               |
  |                           |                               |
  |                           |                               |
  |    OAuth Access Token     |                               |
  |+------------------------->|                               |
  |                           |                               |
  |                           |                               |
  |   API Usage (w/ token)    |                               |
  |+------------------------->|                               |
  |<-------------------------+|                               |
  |                           |                               |
  |+------------------------->|                               |
  |<-------------------------+|                               |
  |                           |                               |
  |           ...             |                               |
  +                           +                               +

更新: This question is quite similar 到我的.. 如果这是正确的路径,那么第二+第三步(将 Facebook 令牌传输到我们的自定义 API,加上验证令牌本身)不能是额外的 OAuth2 授权类型(即facebook_token)?

【问题讨论】:

代理所有 API 请求并使用您的请求修改 url、标头和请求参数怎么样? 嗨,我面临着完全相同的问题。您是否找到了可行的解决方案来做到这一点?谢谢 【参考方案1】:

您可以尝试使用您刚刚在移动设备上检索到的 fb 访问令牌。 (可以是任何其他提供者)。将其发送到您的服务器以登录/注册/两者的 Web 服务。在服务器端,您可以使用 fb sdk 和访问令牌检查谁是用户,登录用户并向他发送 cookie/会话。

【讨论】:

【参考方案2】:

我不是 ios 开发人员,但我目前正在使用开源 DotNetOpenAuth 库在 .NET 环境中开发类似的工作流程。也许看看它会有所帮助。

首先:身份验证方法取决于您要支持的提供商。

一些可以澄清的读数:http://softwareas.com/oauth-openid-youre-barking-up-the-wrong-tree-if-you-think-theyre-the-same-thing http://openid.net/get-an-openid/what-is-openid/http://blog.bobcravens.com/2010/08/openid-and-oauth-using-dotnetopenauth-in-asp-net-mvc/ http://***.com/questions/7996124/how-to-authorize-mobile-apps-with-a-third-party-by-oauth-but-connect-to-my-servi

通用身份验证工作流程: 1. Web 应用程序首先显示一个允许用户在各种 OpenID / OAuth 提供程序之间进行选择的区域。 2. 您的应用程序重定向到提供者的服务器(在可能将一些应用程序信息添加到发布数据之后 - 请参阅特定提供者的 API 参考以获取详细信息)。 OpenID 和 OAuth 都使用一系列重定向来获得用户身份验证。关键是身份验证发生在提供商的站点上,而这就是存储密码的地方。 3. 用户登录所选的提供商,然后发生新的重定向到您的站点(通过回调 URL 机制)。 4. 此重定向包括 OpenID / OAuth 提供者提供的有关经过身份验证的用户的信息。重定向至少会向您的应用程序提供一个“用户名”。 5. 使用此信息来验证经过身份验证的用户是否可以进入您的网站。

【讨论】:

感谢 Gianni,但这里的问题不在于 Web 应用程序充当 Facebook 的 OAuth 客户端:这是所有经典的、记录在案的东西。我的问题是关于一个想要使用自定义 API 的移动应用程序,但需要通过第三方 OAuth 授权方(即 Facebook)而不是通过直接 OAuth 连接对其进行身份验证。【参考方案3】:

斯特凡诺

我们为此使用 StackMob。它工作得很好,实现起来也很简单。

StackMob SDK 通过 Facebook 和 Twitter 提供 OAUTH2 安全性和身份验证。

更新:StackMob no longer exists as of May 2014

【讨论】:

请您解释一下在哪里如何 OP 可以使用此 SDK 或您认为这样做的原因回答 他的任何问题。 是的,感谢 radesix,我可以看到他们的 API supports calls to create and login users using Facebook,但我找不到与 OAuth2 相关的任何内容。当然,它们似乎也支持 OAuth2 协议,但不是为了解决这个特殊问题。 Stefano,我不确定为什么这不能解决您的问题。 StackMob 根据您的要求使用 OAUTH 2。我错过了什么吗? 答案没有解决 StackMob 在 OAuth2 协议中处理这个特定身份验证流程的“方式”。 抱歉,这并不能以任何方式回答问题!【参考方案4】:

为您的社交登录提供商创建不同的 OAuth 客户端 ID。

示例:

Facebook -- 客户 ID #1 Twitter -- 客户端 ID #2


为您的社交流创建您的公共路线。

示例:

http://www.test.com/auth/facebook/ http://www.test.com/auth/facebook/callback/

社交提供者回调成功后,您需要以编程方式从数据存储中为相关用户获取数据,然后生成 访问令牌,其中包含您想要授予的任何预定义范围客户 ID 有问题。


如果您有第 3 方通过尝试使用您的 API 直接尝试与您自己的客户进行交互,这将是一个两步过程。

首先,他们(客户)必须按照前面的说明完成社交登录过程。

然后,在成功的社交提供商回调中,您需要向客户显示一个界面(可能是基于网络的),允许他们接受/拒绝第 3 方请求的权利范围。在初始社交登录位上,您显然必须传递一个 long 或存储第 3 方请求的范围,以便将它传递给社交提供者回调步骤。

【讨论】:

以上是关于OAuth2“社交登录”流程(允许通过 Facebook/Twitter 进行 OAuth2 身份验证):是不是有任何示例/文献?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth - 在“社交登录”中使用刷新令牌

Spring Boot社交登录和本地OAuth2-Server

如何使用 OAuth2 和社交登录保护 Spring Boot RESTful 服务

Spring Boot 和 OAuth2 社交登录,无法获取 refreshToken

Spring Boot 社交登录和本地 OAuth2-Server

如何在使用 OAuth2 社交登录保护 REST API 的同时配置 Spring Boot 登录页面