我想使用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下的路由器时,我无法重定向到登录表单。我做错了什么,能用这种方式实现我想要的吗?
答案 0 :(得分:0)
我找到了导致问题的原因,我的应用程序是多语言的,所以我明确地写了一个带有语言环境的url模式
#api firewall
pattern: ^/(lt|en)/api
#secured_area firewall
pattern: ^/(lt|en)
现在它可以正常工作并重定向到正确的身份验证机制