使用第三方Oauth提供程序对API的用户进行身份验证

时间:2013-08-05 19:41:59

标签: javascript api rest oauth

我正在使用RESTful API将服务器端Web应用程序转换为单页JavaScript应用程序。目前。用户可以使用Facebook,Twitter,Google等或通过电子邮件和密码进行身份验证。如何允许在RESTful API上运行相同形式的身份验证?我猜它看起来像这样:

  1. 在客户端与提供商进行身份验证。
  2. 从Oauth响应中获取一些内容并将其传递给我服务器上的API,以换取访问令牌。
  3. 使用基于令牌的身份验证进行后续API调用。
  4. 我是否在正确的轨道上?如果是这样的话:

    1. 是否有一个处理多个提供商的JS库,或者每个提供者都需要包含Facebook的JS SDK?
    2. 我的API应该如何生成令牌?特别是,我需要从Oauth提供商处获得什么以及如何在服务器上验证它?

2 个答案:

答案 0 :(得分:7)

我建议您专门为您的API生成API访问密钥或使用单独的OAuth流程。从概念上讲,您需要将创建帐户的行为与您的服务分开,并连接远程帐户。你可能会把你所描述的内容拉下来,但这会令人困惑。

要在客户端轻松完成OAuth,请查看oauth.io

答案 1 :(得分:3)

您可以更轻松地针对服务器端的身份提供程序而不是客户端处理身份验证过程。 因此,您的REST服务器应该支持它自己的身份验证方法(也可以是基于OAuth的),并将其传输给第三方提供商。所以流程看起来像这样:

  1. 从客户端(JS)启动登录过程 - 调用您的REST身份验证端点,指定您要登录的网络(例如myserver.com/login?provider=facebook).

  2. 处理服务器端的登录过程 - 重定向到提供者登录端点,接收登录回调,处理响应(获取facebook会话令牌等)。

  3. 发布您自己的用户会话(如果您正在进行OAuth,则发出令牌),并回复您的JS客户端。

  4. 有几个社交登录库可以帮助您,查看PHP http://hybridauth.sourceforge.net/或Java http://code.google.com/p/socialauth/

    还有一些商业解决方案可以让您的生活更轻松(我正在为Gigya工作,所以我有偏见),但这只是在您有预算的情况下。