我对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
上发出请求时,用户就是我,而不是模仿者。
有人可以帮助我吗?
答案 0 :(得分:3)
我相信你所做的事情不会像你想要的那样发挥作用。
API
防火墙为stateless
,这意味着身份验证中没有session
。通常使用REST API
,您可以通过设置TOKEN
或作为请求的一部分header
向您发送http://localhost/api/users?apiKey=my_key_goes_here
,这是您进行身份验证的方式。
另一方面,在main
防火墙中,身份验证是通过会话完成的。身份验证凭据(即UserToken
)存储在a session
中,然后每次用户向您网站的网址发出请求时都会使用这些凭据。
context
都基于firewalls
,那么session
就会有效。在这种特殊情况下,身份验证方法完全不兼容,这就是为什么您只需点击Symfony development tool bar
和impersonate
其他用户。
在packagist中进行简单搜索我找到了SwitchUserStatelessBundle,这可能是您正在寻找的内容。