gpt4 book ai didi

security - 不需要 UserProvider 的自定义身份验证

转载 作者:行者123 更新时间:2023-12-04 05:10:10 25 4
gpt4 key购买 nike

我在网上为我的配置寻找解决方案,但找不到满足我需求的解决方案。
到目前为止,我已经为此工作了整整 3 天,但我无法使其正常工作,我确信有几件事我不明白。

我正在分支 2.1 上开发我的 symfony 应用程序。

为了使这个简短。我有一个要用于身份验证的网络服务。

这是我要实现的流程:

  • 用户提交凭据
  • 这些凭据(需要用户名和密码)发送到我的网络服务
  • 如果用户名/密码正确,webservice 会给出一个数组,其中包含用户名、角色和除密码之外的其他内容。 (如果凭证不正确,将返回一个包含一个字段的数组)
  • 一旦 web 服务给出“大”数组,我希望用户被认为是经过身份验证的。
  • 在返回的角色函数中,我希望 Symfony 安全组件给用户相应的授权。
  • 我想避免为浏览的每个页面调用网络服务。

  • 我不知道是否可以使用 Symfony 来实现这一点,当然这个工作流程似乎不是更安全,但我看不到使用这个 web 服务的另一种方式。

    最后,我不需要 UserProvider,因为我的身份验证是在远程服务上进行的。但显然,Symfony 组件需要一个用户提供者(不管它的类型)。

    我提前谢谢你

    编辑:为了简单起见,是否可以在 UserProvider 类(实现 UserProviderInterface)的 loadUserByUsername() 函数中传递变量 $username 以外的东西?除了他/她的用户名之外,我还需要让用户通过才能检索用户对象。

    最佳答案

    AuthenticationProvider 通常会调用 UserProvider.loadUserByUsername。在您的情况下,无需调用它。您的身份验证方法可以负责创建用户并传回 token 。

    经过身份验证的 token 最终会在 session 中结束。

    问题是,默认情况下,当下一个请求进来时,系统将从 session 中检索 token /用户,然后调用 UserProvider.refreshUser($user),它再次默认使用 loadUserByUsername 重新加载用户。

    因此,您需要创建自己的用户提供程序,并让 refreshUser 返回相同的用户。您将需要一个 loadUserByUsername 来满足接口(interface),但绝不应该调用它。

    如果您确实想从 Web 服务定期刷新您的用户,那么您需要添加自己的监听器以从 session 中加载 token 并覆盖默认行为。

    关于security - 不需要 UserProvider 的自定义身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14988162/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com