symfony2使用多个防火墙

时间:2015-04-08 06:06:03

标签: security symfony

我想使用2个不同的防火墙,一个用于常规网站访问,另一个用于api:例如,当调用/任何东西时......常规防火墙应该采取行动,但是在调用/ api时...我不想使用其他防火墙来验证用户,方法是检查请求授权标头,然后从db中获取该用户。 我找到了我想要的东西:http://symfony.com/doc/current/cookbook/security/api_key_authentication.html但我想使用多个防火墙。我复制了示例中的代码(Authenticator类和UserProvider类,并将它们注册为服务),然后在我的security.yml中复制:

providers:
    client_control:
        entity: { class: AppBundle:Users }
    api_key_user_provider:
        id: api_key_user_provider

firewalls:
    api:
        pattern: ^/api
        stateless: true
        simple_preauth:
            authenticator: apikey_authenticator

    secured_area:
        remember_me:
            key: "%secret%"
            lifetime: 31536000 # 365 days in seconds
            path: /
            domain: ~ # Defaults to the current domain from $_SERVER
        pattern: ^/
        anonymous: ~
        form_login:
            provider: chain_provider
            csrf_provider: form.csrf_provider
            login_path: login
            check_path: login_check
        logout: ~

可悲的是,当我尝试访问/ api url下的路由器时,我无法重定向到登录表单。我做错了什么,能用这种方式实现我想要的吗?

1 个答案:

答案 0 :(得分:0)

我找到了导致问题的原因,我的应用程序是多语言的,所以我明确地写了一个带有语言环境的url模式

#api firewall
pattern: ^/(lt|en)/api

#secured_area firewall
pattern: ^/(lt|en)

现在它可以正常工作并重定向到正确的身份验证机制