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

时间:2012-07-04 10:30:51

标签: ios api ios5 oauth-2.0 facebook-oauth

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

网络应用程序允许用户使用外部服务(即Facebook和Twitter)登录和注册。我们还需要在移动应用上允许相同的内容。问题是:我们怎么做?

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

Pinterest Login View

他们的行为是否像经典的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)?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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://stackoverflow.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.使用此信息验证经过身份验证的用户是否可以进入您的站点。

答案 2 :(得分:1)

斯特凡诺

我们使用StackMob。它运行良好,实现起来非常简单。

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

更新StackMob no longer exists as of May 2014

答案 3 :(得分:0)

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

示例:

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


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

示例:

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

如果社交提供商回调成功,您需要以编程方式从相关用户的数据存储中获取数据,然后使用您要授予的任何预定义范围生成访问令牌对于有问题的客户ID


如果您的第三方试图通过尝试使用您的API直接尝试与您自己的客户进行交互,那么它将必须分为两个步骤。

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

然后,在成功的社交提供商回调中,您需要向客户显示一个接口(可能是基于Web的),允许他们接受/拒绝第三方请求的权限范围。在最初的社交登录位上,您显然必须通过长时间或存储第三方请求的范围,以便将其传递给社交提供程序回调步骤。