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 bar
和 impersonate
另一个用户。
在 packagist I found SwitchUserStatelessBundle 中进行简单搜索,这可能就是您要查找的内容。
我对 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 bar
和 impersonate
另一个用户。
在 packagist I found SwitchUserStatelessBundle 中进行简单搜索,这可能就是您要查找的内容。