Symfony:在子路由上允许基本身份验证 - 多个防火墙

时间:2017-12-04 15:49:50

标签: symfony authentication basic-authentication http-basic-authentication symfony4

我的Symfony 4应用程序有一个主防火墙。它被配置为从数据库加载用户并使用登录表单等所有标准内容。它工作正常。

这是我当前的security.yaml文件:

security:
encoders:
    App\Entity\User:
        algorithm: bcrypt
providers:
    user_provider:
        entity:
            class: App\Entity\User
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        pattern: ^/
        provider: user_provider
        anonymous: ~
        form_login:
            login_path: /login
            check_path: /login
        logout:
            path: /logout
            target: /login
access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_ADMIN }

现在我需要在其中包含动态信息的特定路由中添加基本身份验证,这就是我在苦苦挣扎的地方。示例网址为:

  

http://myapp.com/repositories/%%username%%/directory/file.json

因此,标准登录表单可以保护并验证http://myapp.com/

但如果请求是^ / repositories / %% username %%,我需要使用基本身份验证。

%% username %%是动态的,因为您可以看到它的路径,该文件将成为JSON中的响应。基本的auth实际上不需要为symfony进行身份验证,它只需要可用,如果失败则返回正确的异常/响应:

  

array('fatal:Authentication failed','remote error:用户名或密码无效。')

非常感谢任何帮助。

由于

**编辑**

好的家伙所以我已经设法弄清楚如何将基本身份验证与我的基于表单的身份验证一起添加到子路径。

现在我只需要弄清楚如何为动态路线启用基本身份验证。

目前,以下security.yaml涵盖http://myapp.com/repositories,任何成功登录的人都可以访问下面的所有路径。

security:
encoders:
    App\Entity\User:
        algorithm: bcrypt
providers:
    user_provider:
        entity:
            class: App\Entity\User
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    repos:
        pattern: ^/repositories/
        anonymous: ~
        stateless: true
        http_basic:
            realm: "Toran Proxy Access"
    main:
        pattern: ^/
        provider: user_provider
        anonymous: ~
        form_login:
            login_path: /login
            check_path: /login
        logout:
            path: /logout
            target: /login
access_control:
    - { path: ^/repositories/, roles: ROLE_ADMIN}
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_ADMIN }

但我现在需要做的是使用基本身份验证限制/存储库/ %% username %%,并且只允许访问此目录以获取某些凭据。

由于

1 个答案:

答案 0 :(得分:0)

最后,我在http://symfony.com/doc/current/security/custom_authentication_provider.html

之后创建了自己的授权提供程序

在提供程序中,我检查了当前用户是否应该拥有子目录的权限。