Symfony2如何使用两种不同的方法在两个不同的防火墙上验证用户?

时间:2014-09-10 14:00:04

标签: api symfony

我有两个防火墙,一个用于我的API调用(WSSE安全),一个用于我的应用程序。两者都运行良好,但我需要在api防火墙上对用户进行身份验证,同时在应用程序防火墙上进行身份验证,我不能这样做。

我的security.yml

firewalls:
    # Firewall for the api
    wsse_secured:
        pattern:   ^/api/.*
        wsse:
            nonce_dir: null
            lifetime: 300
            provider: fos_userbundle
        context: user

    # Firewall for the application
    main:
      pattern: /.*
      form_login:
            provider: fos_userbundle
            login_path:     fos_user_security_login
            check_path:     fos_user_security_check
            default_target_path: espace_perso
            always_use_default_target_path: false
            failure_path: fos_user_security_login
        logout:
            path: fos_user_security_logout
            target: fos_user_security_login
        oauth:
            resource_owners:
                facebook: "/login/check-facebook"
                linkedin: "/login/check-linkedin"
                google: "/login/check-google"
            login_path: fos_user_security_login
            oauth_user_provider:
                service: bg.oauth.user_provider
        anonymous: true
        context: user

我已经阅读过其他帖子(this questionthis onethis one),正如您所看到的,添加上下文在我的情况下不起作用。

我尝试手动添加我需要的wsse标头,或者为我的用户创建一个新的WsseToken,但没有成功。

我真的需要帮助解决这个问题,这个问题必须是常见的......

1 个答案:

答案 0 :(得分:0)

据我了解,您希望重复使用API​​中的操作以供用户访问。如果没有,请提供更多详细信息。

最好的办法就是在不同的防火墙下为同一个动作制作另一条路线。

假设你有:

<route id="api_form_validate" pattern="/api/validate-form">
    <default key="_controller">Bundle:ApiController:validateForm</default>
</route>

添加:

<route id="user_form_validate" pattern="/user/validate-form">
    <default key="_controller">Bundle:ApiController:validateForm</default>
</route>

将表单操作从api_form_validate更改为user_form_validate