使用一个登录表单验证多个symfony2防火墙
我有两个防火墙:使用一个登录表单验证多个symfony2防火墙,symfony,firewall,symfony-security,Symfony,Firewall,Symfony Security,我有两个防火墙: api(用于api调用) main(适用于所有其他内容) 我的客户端应用程序通过main防火墙登录。但是,它确实与api防火墙下的端点交互以获取数据。这里的问题是,我不想强迫用户第二次登录以针对第二个防火墙进行身份验证 如何仅使用一个登录表单就对两个防火墙进行身份验证?也许您可以尝试使用“上下文”防火墙属性 假设您有一个类似这样的配置(您大概是这样做的): 在这种情况下,用户的会话在针对“主”防火墙进行身份验证后将包含“\u security\u main”属性,然后当他们尝试
api
(用于api调用)main
(适用于所有其他内容)main
防火墙登录。但是,它确实与api
防火墙下的端点交互以获取数据。这里的问题是,我不想强迫用户第二次登录以针对第二个防火墙进行身份验证
如何仅使用一个登录表单就对两个防火墙进行身份验证?也许您可以尝试使用“上下文”防火墙属性 假设您有一个类似这样的配置(您大概是这样做的): 在这种情况下,用户的会话在针对“主”防火墙进行身份验证后将包含“\u security\u main”属性,然后当他们尝试访问“api”位置时,将提示他们重新身份验证,然后将获得“\u security\u api”会话属性 为了防止此重新提示,您可以将“context”属性添加到希望共享相同身份验证的每个防火墙定义中-因此:
security:
# providers etc ...
firewall:
main:
pattern: # ...
provider: my_users
http_basic: ~
context: primary_auth # new
api:
pattern: # ...
provider: my_users
http_basic: ~
context: primary_auth # new
在这种情况下,使用“主”防火墙进行身份验证后,将在用户会话中设置“\u security\u primary\u auth”属性。“api”firewill中的任何后续请求都将使用“\u security\u primary\u auth”的值来建立身份验证状态(因此用户将显示为已验证)
当然,这种身份验证上下文共享将以两种方式工作(无论它们是首先使用“main”还是“api”防火墙进行身份验证)-如果您只希望在一个方向上实现暂时性,那么事情将更加复杂
希望这有帮助。很好,我找了很久了!我有完全相同的问题,唯一的区别是“主”防火墙使用登录表单而不是http_basic进行身份验证,因此,即使用户通过登录表单进行身份验证,“api”防火墙也会提示用户再次登录。有什么方法可以让它工作吗?嗨,太好了,它工作了,新年好的开始!!!(我在哪里可以了解文档中的上下文?)
security:
# providers etc ...
firewall:
main:
pattern: # ...
provider: my_users
http_basic: ~
context: primary_auth # new
api:
pattern: # ...
provider: my_users
http_basic: ~
context: primary_auth # new