【问题标题】:Adding OAuth 2.0 authentication to a RESTful API将 OAuth 2.0 身份验证添加到 RESTful API
【发布时间】:2014-12-05 20:16:56
【问题描述】:

我有一个需要通过 OAuth 2.0 进行身份验证的 API。我最初预计会使用HWIOAuthBundle,但根据调查,这更多是为了将第 3 方连接到 Symfony 的安全/身份验证机制中,并且不提供验证 OAuth 2.0 Authorization 标头所需的机制。

然后我发现了一些关于 FOSOAuthServerBundle 的信息,它使应用程序能够成为它自己的 OAuth 2.0 提供者,并提供所需的安全机制来验证 Authorization 标头。

但问题是我想将 OAuth 2.0 提供程序(授权服务器)集成到外部应用程序(包含用户群)中,而不是将其包含在 API 中。这将提供一些机制来通过(另一个)RESTful API 对此外部应用程序执行令牌验证。

积分:

  • RESTful API 需要 OAuth 2.0 身份验证。
  • OAuth 2.0 授权服务器位于单独的应用程序中。

我觉得我应该使用Implicitgrant 并在每个请求上调用授权服务器来验证令牌是否正确。

我的想法对吗?

【问题讨论】:

  • 所以如果我理解正确,您想使用来自外部 API 的用户凭据进行身份验证?
  • 不是用户凭据。通过 oauth,但这在 API 之外。我见过的所有例子都把它们放在一起
  • 所以您想在当前应用程序中设置 FOSOAuthServerBundle 以便外部应用程序可以使用您的应用程序进行身份验证?
  • 我想在不同的应用程序上设置 OAuth 提供程序,但让 REST API 提供针对此提供程序的 OAuth 身份验证。
  • 我不确定这是否可能。用例是什么?

标签: api rest symfony oauth-2.0


【解决方案1】:

据我了解您的要求,您需要通过外部 OAuth 授权服务器对您的 API 进行身份验证:

  • 客户端需要提供上述步骤中检索到的访问令牌 以及访问受保护资源的请求。访问令牌 将作为请求标头中的授权参数发送。

  • 服务器将根据令牌对请求进行身份验证。

  • 如果令牌有效,则客户端将获得对受保护资源的访问权限,否则访问将被拒绝。

这里有一个example,它可能会帮助您实现您的要求。检查这个document

或者简单地说,您可以使用Jersey and Oauth

另外,您可以查看Apache Oltu 并找出实现您要求的方法。

【讨论】:

    【解决方案2】:

    许多大公司,如 Google、Facebook 等,都有独立于 API 服务器的授权服务器。在下方查看 Google 的 OAuth 授权流程

    您也可以查看 Google 的OAuth Documentation 了解详情。

    因此,您需要做的就是实现一个 OAuth 提供程序,以便您可以针对该提供程序进行授权。 OAuth 网站上有一个可用的库列表:http://oauth.net/code。可以具体看here;有一个在 Java 中运行 OAuth 服务提供者的示例。

    【讨论】:

      【解决方案3】:

      oAuth 绝对可以是您的应用程序服务器以外的服务器。下面是身份验证序列的图片:

      -- 显然,如果论坛无法解码或验证令牌,论坛将返回 401 状态码而不是 200 状态码。

      只要您的 oAuth 服务器和论坛共享相同的公钥,您就可以拆分您的 oAuth 服务器和您的应用程序。

      其实看看jwt.io。将从 oAuth 服务器获得的令牌粘贴到那里。它应该能够立即解码令牌。然后,您可以将您的公钥放入“秘密”文本框中以验证令牌是否已通过验证。

      您的应用程序(本例中为论坛)应该能够做到这一点:

      1) 从请求的 Authorization 标头中获取令牌

      2) 解码令牌

      3) 检查过期日期

      4) 使用 oAuth 的公钥验证令牌

      5) 返回成功状态码或失败状态码

      【讨论】:

      • 我没有研究过 JWT 的实现,但我想这是可以考虑的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2012-11-08
      • 2014-12-24
      • 2011-11-28
      • 1970-01-01
      • 2014-07-28
      • 2012-11-27
      • 2014-02-09
      • 2013-08-21
      相关资源
      最近更新 更多