将OAuth 2.0身份验证添加到RESTful API

时间:2014-10-10 15:43:40

标签: api rest symfony oauth-2.0

我有一个需要通过OAuth 2.0进行身份验证的API。我最初预计会使用HWIOAuthBundle,但是从调查来看,这更多地与将第三方连接到Symfony的安全/身份验证机制有关,并且没有提供验证OAuth 2.0 Authorization标头所需的机制

然后,我找到了一些有关FOSOAuthServerBundle的信息,这些信息使应用程序成为自己的OAuth 2.0提供程序,并提供了验证Authorization标头所需的安全机制。

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

点数:

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

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

我的想法是否正确?

3 个答案:

答案 0 :(得分:5)

根据我的要求,您需要通过外部OAuth授权服务器验证您的API:

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

  • 服务器将根据令牌验证请求。

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

这是一个example,它可以帮助您实现您的要求。请检查此document

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

此外,您可以查看Apache Oltu并找出达到要求的方式。

答案 1 :(得分:3)

Google,Facebook等许多大公司都有一个独立的API服务器授权服务器。查看Google Google OAuth Authorization

下面的Google OAuth授权流程

您还可以查看Google的OAuth Documentation了解详细信息。

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

答案 2 :(得分:2)

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

enter image description here

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

只要您的oAuth服务器&论坛共享相同的公钥,你可以分割你的oAuth服务器&你的申请。

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

您的应用程序(论坛,在此示例中)应该能够执行相同的操作:

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

2)解码令牌

3)检查过期日期

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

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