0

我的 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 }

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

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

因此,最多http://myapp.com/由标准登录表单保护和验证。

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

%%username%% 是动态的,如您所见,它是指向将作为 JSON 响应的文件的路由。基本身份验证实际上不必为 symfony 进行身份验证,它只需要可用并且如果失败则返回正确的异常/响应:

array('fatal: Authentication failed', 'remote error: Invalid username or password.')

任何帮助将非常感激。

谢谢

** 编辑**

好的,伙计们,我已经设法弄清楚如何在基于表单的身份验证旁边为子路由添加基本身份验证。

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

目前以下 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 }

但是我现在需要做的是限制 /repositories/%%username%% 使用基本身份验证,并且只授予对某些凭据的访问该目录的权限。

谢谢

4

1 回答 1

0

所以最后我按照http://symfony.com/doc/current/security/custom_authentication_provider.html创建了自己的授权提供程序

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

于 2017-12-05T13:45:04.430 回答