使用一个登录表单验证多个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