使用一个登录表单验证多个symfony2防火墙

时间:2012-01-31 05:51:33

标签: symfony firewall symfony-security

我有两个防火墙:

  1. api(用于API调用)
  2. main(其他一切)
  3. 我的客户端应用程序登录通过main防火墙进行。但是,它确实与api防火墙下的端点进行交互以获取数据。这里的问题是我不想强迫用户再次登录以对第二个防火墙进行身份验证。

    如何只使用一个登录表单对两个防火墙进行身份验证?

1 个答案:

答案 0 :(得分:60)

也许你可以尝试上下文'防火墙属性。

假设您有类似这样的配置(可能是您这样做):

security:
    // providers etc ...

    firewall:
        main:
            pattern: # ...
            provider: my_users
            http_basic: ~
        api:
            pattern: # ...
            provider: my_users
            http_basic: ~

在这种情况下,用户的会话将包含' _security_main'对“主要”进行身份验证后的财产防火墙,然后当他们试图访问“api”时。位置将提示他们重新认证,然后获得“安全_api”#39;会话属性。

要阻止此重新提示,您可以添加'上下文'您想要共享相同身份验证的每个防火墙定义的属性 - 所以:

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

在这种情况下,在使用' main'进行身份验证后防火墙,' _security_primary_auth'属性将在用户的会话中设置。任何随后的请求都在' api'然后,firewill将使用' _security_primary_auth'的值。建立身份验证状态(因此用户将显示身份验证)。

当然,这种身份验证上下文共享可以双向运行(无论是首先使用'主要'还是' api'防火墙) - 如果您只想在一个方向上进行短暂转移事情会更复杂。

希望这有帮助。