Symfony 3针对远程API

时间:2017-05-27 07:03:07

标签: rest api symfony authentication

我有一个应用程序,其中后端和前端由不同的主机提供,并且是两个不同的应用程序(基于Symfony 3)。

其中一个(后端ofc)处理业务逻辑并将用户及其角色保留在其数据库中。后端提供前端使用的REST API。我无法修改后端代码,因为它不是我的项目 - 我只是想为它创建一个前端。

目前,我正在尝试在Symfony 3中创建前端应用程序,但我不确定如何使前端应用程序针对远程API进行身份验证并且不保留用户数据(或者尽可能少)尽可能)。

在通过REST API将凭据传递到后端之后,会将令牌发送到前端应用程序并跟随API请求(例如,前端应用程序将呈现给用户的数据将在成功进行身份验证后收到令牌)。

我的问题:我如何对来自Symfony 3的远程自定义(非OAuth)API进行身份验证?

另外:如何在以后正确处理令牌?(必须在成功验证后的每个请求中使用它)。实现这一目标的最简单方法是什么?

我一直在努力寻找合适的信息(也许是教程?)我是Symfony的一个菜鸟:(

大多数文章都描述了提供一个API,允许客户端连接到它,而不是在Symfony中创建客户端应用程序。

我找到了什么: Symfony2 authentication via 3rd Party REST API - 最相关的,虽然它描述了Symfony 2的流程,并且接受的答案描述了应该只是简单地做什么

https://blog.vandenbrand.org/2012/06/19/symfony2-authentication-provider-authenticate-against-webservice/ - 关于Symfony 2

http://symfony.com/doc/current/security/custom_authentication_provider.html - 可能是最常见的主题,但是,我不明白app会在哪里保留用户(在此示例中是否需要编写自定义用户提供程序?)

1 个答案:

答案 0 :(得分:0)

您已经在问题上找到了答案。那是custom authentication provider。您可以将令牌保留在前端应用程序存储中,并对其进行身份验证。登录时,您应该通过请求后端应用创建令牌,将其保存在令牌存储中,这就是全部。然后,您只需要验证令牌(只需查看身份验证提供程序的示例)。

关于在前端应用中保留用户数据,这取决于您。您不必保留任何数据,因此如果您想显示一些详细信息(即用户名等),您还必须存储该详细信息(或检索每个请求 - 但这会影响性能)。至少你可以使用缓存。

所以可能的方法是:

  1. 登录时(使用登录表单或其他地方),只需在登录处理程序中对用户进行身份验证(按照there创建自己的身份验证提供程序 - 不要担心Symfony 2,安全组件几乎相同 - 有一些不相​​容,但方向是正确的)。身份验证成功后,将令牌存储在前端存储中(您也可以存储一些您需要的用户详细信息,如名称等)。
  2. 在每个请求上,使用保存在前端应用程序存储中的令牌(即另一个身份验证提供程序)对用户进行身份验证 - 您无需向后端应用程序发送请求。