Javascript 使用第三方Oauth提供程序验证API用户

Javascript 使用第三方Oauth提供程序验证API用户,javascript,api,rest,oauth,Javascript,Api,Rest,Oauth,我正在使用RESTful API将服务器端web应用程序转换为单页JavaScript应用程序。目前。用户可以使用Facebook、Twitter、Google等或通过电子邮件和密码进行身份验证。如何允许在RESTful API上运行相同形式的身份验证?我猜它看起来像这样: 在客户端向提供程序进行身份验证 从Oauth响应中获取一些内容,并将其传递给服务器上的API,以交换访问令牌 对后续API调用使用基于令牌的身份验证 我走对了吗?如果是: 是否有一个JS库可以处理多个提供者,或者每个提供者都

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

  • 在客户端向提供程序进行身份验证
  • 从Oauth响应中获取一些内容,并将其传递给服务器上的API,以交换访问令牌
  • 对后续API调用使用基于令牌的身份验证
  • 我走对了吗?如果是:

  • 是否有一个JS库可以处理多个提供者,或者每个提供者都需要包含Facebook的JSSDK之类的东西
  • 生成令牌的API应该是什么样子?特别是,我需要Oauth提供程序提供什么,以及如何在服务器上验证它

  • 我建议生成一个API访问密钥,或者专门为您的API使用一个单独的OAuth流。从概念上讲,您需要将创建帐户与服务以及连接远程帐户的操作分开。你可能会把你所描述的扯下来,但这会让人困惑


    要使OAuth在客户端中更容易,请查看

    在服务器端而不是客户端处理针对身份提供程序的身份验证过程会更容易。 因此,您的REST服务器应该支持自己的身份验证方法(也可以是基于OAuth的),并将其传输给第三方提供者。因此,流将如下所示:

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

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

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

  • 有几个社交登录库可以帮助您查看PHP或Java


    还有一些商业解决方案可以让你的生活更轻松(我为之工作,所以我有偏见),但这只有在你有预算的情况下才能实现。

    谢谢,从技术角度来看,这是有意义的。我从用户体验的角度思考,希望有一些方法可以在我的单页应用程序中不重定向。看起来Facebook可以使用JSSDK,但可能不会更普遍。你可以通过打开弹出窗口来避免从页面重定向。您不必从单个页面重定向到登录REST端点,您可以打开一个指向该端点的弹出窗口,重定向到IDP(如facebook)将在该弹出窗口中完成。在登录过程结束时,您必须从弹出窗口向主页上的JS发送登录响应和会话信号。完美!因为我只在一个窗口内工作,所以我没有想过在弹出窗口和页面之间进行交流。我经常发现完全符合我需要的“离题”问题。看看投票结果,这是很多人问自己的问题。