Symfony 模拟一个用户和多个防火墙

Symfony impersonate a User and multiple firewall

我对 symfony 的一个功能有疑问。当我模拟用户并拨打我的 API 时,用户不是模拟用户。

这是我的安全配置:

api:
    pattern:   ^/api/.*
    provider: fos_userbundle
    guard:
        authenticators:
            - app.wsse_authenticator
            - app.form_login_authenticator
        entry_point: app.wsse_authenticator
    logout:       true
    stateless: true
    anonymous:    true
    switch_user: true
    context: my_context
main:
    pattern:   ^/.*
    provider: fos_userbundle
    guard:
        authenticators:
            - app.form_login_authenticator
    switch_user: true
    logout:       true
    anonymous:    true
    remember_me:
        secret:      "%secret%"
        lifetime: 7200 # in seconds (=12h)
        always_remember_me: true
    context: my_context

我尝试使用相同的上下文在两个防火墙之间共享模拟用户,但它不起作用。

当在 /test 上发出请求时,使用了模拟用户,但是当我在 /api/test 上发出请求时,用户是我而不是模拟用户。

有人可以帮助我吗?

我相信您尝试做的事情不会按照您希望的方式进行。

API防火墙是stateless,也就是说没有session参与认证。通常使用 REST API 您可以通过设置 header 或作为请求的一部分发送 TOKEN 以及您的请求 - http://localhost/api/users?apiKey=my_key_goes_here 这是您进行身份验证的方式。

另一方面,在 main 防火墙中,身份验证是通过会话完成的。身份验证凭据(即 UserToken)存储在 session 中,然后每次用户向您的站点 url 发出请求时都会使用它们。

如果两个 firewalls 都基于 session,那么 context 会起作用。在这种特殊情况下,身份验证方法根本不兼容,这就是为什么您不能简单地单击 Symfony development tool barimpersonate 另一个用户。

packagist I found SwitchUserStatelessBundle 中进行简单搜索,这可能就是您要查找的内容。