【问题标题】:Symfony 3 authenticate user against remote APISymfony 3 针对远程 API 对用户进行身份验证
【发布时间】:2017-10-28 01:56:17
【问题描述】:

我有一个应用程序,其中后端和前端由不同的主机提供服务,并且是两个不同的应用程序(均基于 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 - 可能是最受关注的话题,但是,我不明白应用会将其用户保留在哪里(在此示例中是否需要编写自定义用户提供程序?)

【问题讨论】:

    标签: rest api symfony authentication


    【解决方案1】:

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

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

    所以可能的方法是:

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

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 2023-03-14
      • 2017-12-24
      • 2014-03-31
      • 2020-07-10
      相关资源
      最近更新 更多