Symfony access_control未应用' per-host'规则

时间:2017-07-10 08:26:25

标签: symfony security acl

早上的人,

主要是我要确保对以/api/internal开头的网址进行所有调用。 以此路径开头的所有端点仅用于内部调用,例如在ajax搜索框中。所以当我错了时我就是对的,但我认为通过host

中的access_roles定义来保证这一点是个好主意

我尝试使用以下security.yml

security:

role_hierarchy:
    ROLE_myproject_USER: ROLE_USER
    ROLE_TEAMMANAGER: ROLE_USER
    ROLE_ADMIN: [ROLE_TEAMMANAGER]

providers:
    dashboard_users:
        ldap:
            service: myproject.ldap
            # my ldap config

    custom_user_provider:
        id: myproject.factory.scale_user

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    api_internal:
        pattern: ^/api/internal
        security: true
        host: myproject.dev

    api_doc:
        pattern: ^/api/doc
        security: false

    api_login:
        pattern:  ^/api/login
        stateless: true
        anonymous: true

    api:
        pattern: ^/api
        stateless: true
        provider: custom_user_provider
        guard:
            authenticators:
                - myproject.api_login_authenticator

    main:
        anonymous: ~
        form_login_ldap:
            login_path: myproject_login
            check_path: myproject_login
            service: myproject.ldap
            dn_string: 'Verbund\{username}'

        logout:
            path: myproject_logout
            target: /

access_control:
    - { path: ^/api/internal, host: myproject.dev }

但是我收到了这个错误:

InvalidConfigurationException in SecurityExtension.php line 481:
No authentication listener registered for firewall "api_internal".

辅助信息:在这个项目中有3个不同的部分:

  1. / api / internal / **** - 只能从网站本身访问
  2. / api / - 应该可以通过REST访问,通过JWTToken保护
  3. 网站本身 - 通过表单登录和LDAP
  4. 进行保护

    感谢您提供的任何帮助。

    最高

1 个答案:

答案 0 :(得分:0)

为了保护主机安全,请使用access_control

access_control:
# require ROLE_ADMIN for /admin*
- { path: ^/admin, roles: ROLE_ADMIN }

路径是您想要的主机。

为了保护子主机的所有内容,请使用

 - { path: ^/admin/*, roles: ROLE_ADMIN }

删除除main和dev之外的其他防火墙!

有关详细信息,请参阅http://symfony.com/doc/2.8/security.html