2017-04-23 27 views
1

我有一个symfony功能的问题。当我模拟一个用户时,我打电话给我的API,用户不是模仿者。Symfony冒充用户和多个防火墙

这里是我的安全配置:

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上发出请求时,用户是我而不是模拟者。

有人可以帮助我吗?

回答

3

我相信你试图做的事情不会按照你想要的方式工作。

API防火墙是stateless,这意味着没有session参与认证。通常用REST API通过设置header或作为请求的一部分 - http://localhost/api/users?apiKey=my_key_goes_here发送TOKEN与您的请求通过您的请求,这是您如何验证。

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

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

packagist做一个简单的搜索,我发现SwitchUserStatelessBundle这可能是你正在寻找的。