使用第 3 方 Oauth 提供程序对 API 用户进行身份验证 [关闭]

Posted

技术标签:

【中文标题】使用第 3 方 Oauth 提供程序对 API 用户进行身份验证 [关闭]【英文标题】:Authenticating users of an API using a 3rd-party Oauth provider [closed] 【发布时间】:2013-08-06 15:28:25 【问题描述】:

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

    在客户端向提供商进行身份验证。 从 Oauth 响应中获取一些内容并将其传递给我服务器上的 API,以换取访问令牌。 对后续 API 调用使用基于令牌的身份验证。

我在正确的轨道上吗?如果是这样:

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

【问题讨论】:

我经常发现完全符合我需求的“离题”问题。看看赞成票,这是很多人都会问自己的问题。 【参考方案1】:

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

为了使客户端中的 OAuth 更容易,请查看oauth.io

【讨论】:

【参考方案2】:

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

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

    李>

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

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

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

还有一些商业解决方案可以让你的生活更轻松(我在 Gigya 工作,所以我有偏见),但前提是你有预算。

【讨论】:

谢谢,从技术角度来看,这是有道理的。我从 UX 的角度思考,希望有某种方法可以留在我的单页应用程序中而无需重定向。 Facebook 使用他们的 JS SDK 似乎可以做到这一点,但可能不会更普遍。 您可以通过打开一个弹出窗口来避免从您的页面重定向。您不必从单个页面重定向到您的登录 REST 端点,您可以打开一个到该端点的弹出窗口,并且重定向到 IDP(如 facebook)将在该弹出窗口中完成。在登录过程结束时,您必须使用登录响应和会话从弹出窗口向主页上的 JS 发出信号。 完美!因为我只在一个窗口中工作,所以我没有想过在弹出窗口和页面之间进行通信。

以上是关于使用第 3 方 Oauth 提供程序对 API 用户进行身份验证 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

OAuth回调后Laravel访问JWT

在 Oauth2 隐式授权流和第 3 方 cookie 中刷新令牌

具有同源策略和 OAuth 的 REST API 身份验证

如何使用基本身份验证而不是 OAuth 2.0 将 Alexa 用户与 3rd 方应用程序相关联

与 2 个 Rails 应用程序共享 OAuth 令牌

使用 KeyCloak 的 OAuth2 授权接口