18

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

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

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

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)    |                               |
  |+------------------------->|                               |
  |<-------------------------+|                               |
  |                           |                               |
  |+------------------------->|                               |
  |<-------------------------+|                               |
  |                           |                               |
  |           ...             |                               |
  +                           +                               +

更新: 这个问题和我的很相似。如果这是正确的路径,那么第二+第三步(将 Facebook 令牌传输到我们的自定义 API,加上令牌本身的验证)就不可能了额外的 OAuth2 授权类型(即。facebook_token)?

4

4 回答 4

4

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

于 2012-10-16T18:26:16.547 回答
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. 使用此信息来验证经过身份验证的用户是否可以进入您的站点。

于 2012-07-04T18:25:29.007 回答
1

斯特凡诺

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

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

更新StackMob 自 2014 年 5 月起不再存在

于 2012-08-30T19:48:10.100 回答
0

为您的社交登录提供商创建不同的 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 方请求的范围,以便将它传递给社交提供者回调步骤。

于 2015-01-02T07:08:17.850 回答