向RESTful API添加OAuth 2.0身份验证

向RESTful API添加OAuth 2.0身份验证,api,rest,symfony,oauth-2.0,Api,Rest,Symfony,Oauth 2.0,我有一个需要通过OAuth 2.0进行身份验证的API。我最初期望使用,但是从调查来看,这更多是为了将第三方连接到Symfony的安全/身份验证机制,并且没有提供验证OAuth 2.0授权所需的机制 然后,我找到了一些信息,这些信息使应用程序能够成为自己的OAuth 2.0提供程序,并提供所需的安全机制来验证授权头 但是问题是,我希望将OAuth 2.0提供程序(授权服务器)集成到外部应用程序(包含用户群)中,而不将其包含在API中。这将提供一些机制,通过(另一个)RESTful API对该外部

我有一个需要通过OAuth 2.0进行身份验证的API。我最初期望使用,但是从调查来看,这更多是为了将第三方连接到Symfony的安全/身份验证机制,并且没有提供验证OAuth 2.0
授权所需的机制

然后,我找到了一些信息,这些信息使应用程序能够成为自己的OAuth 2.0提供程序,并提供所需的安全机制来验证
授权

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

要点:

  • RESTful API需要OAuth 2.0身份验证
  • OAuth 2.0授权服务器位于单独的应用程序中
我觉得我应该在每个请求上使用grant并调用授权服务器来验证令牌是否正确


我的想法正确吗?

像谷歌、Facebook等许多大公司都有一个独立于API服务器的授权服务器。查看下面Google的OAuth授权流

你也可以查看谷歌的详细信息


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

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

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

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

事实上,请看一看。将从oAuth服务器获得的令牌粘贴到其中。它应该能够立即解码令牌。然后,您可以将公钥放入“机密”文本框,以验证令牌是否已验证

您的应用程序(本例中为论坛)应能够执行以下操作:

1) 从请求的授权标头获取令牌

2) 解码令牌

3) 检查过期日期

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


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

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

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

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

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

下面是一个可能帮助您实现您的需求的示例。看看这个

或者简单地说,你可以用


此外,您还可以检查并找出实现需求的方法。

因此,如果我理解正确,您希望通过使用外部API的用户凭据(而不是用户凭据)进行身份验证。通过oauth,但这是API外部的。我看到的所有示例都有它们,因此您想在当前应用程序中设置FOSOAuthServerBundle,以便外部应用程序可以使用您的应用程序进行身份验证?我想在其他应用程序上设置OAuth提供程序,但是让RESTAPI提供针对该提供者的OAuth身份验证。我不确定这是否可行。用例是什么?我没有研究JWT的这个实现,但我想这是可以考虑的。谢谢