我正在尝试配置Symfony的安全组件,以便在特定环境(travis
)中没有为任何端点启用安全性。
在travis构建期间,我们将使用赛普拉斯测试套件执行集成测试,而我不希望在那里存在安全性。在我的config/packages/security.yaml
文件中,我有以下内容:
security:
encoders:
Symfony\Component\Security\Core\User\User:
algorithm: bcrypt
cost: 12
providers:
in_memory:
memory:
users:
nets:
password: foo
roles: ['ROLE_NETS']
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
http_basic: ~
access_control:
- { path: ^/nets, roles: [ROLE_ADMIN, ROLE_NETS], requires_channel: https }
可正常使用。仅当我提供正确的HTTP基本身份验证凭据时,相应的^/nets
端点才可用。
在我的config/packages/travis/security.yaml
文件中,我有:
security:
firewalls:
main:
pattern: ^/
http_basic: false
security: false
据我了解,应该在travis
环境中关闭所有端点的所有安全性。但事实并非如此,我一直得到401。运行bin/console -e travis debug:config security
时,我得到以下信息:
security:
[...]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
methods: { }
user_checker: security.user_checker
stateless: false
logout_on_user_change: true
main:
pattern: ^/
security: false
methods: { }
user_checker: security.user_checker
stateless: false
logout_on_user_change: true
[...]
对我来说,这表明所有路由的安全性都应处于无效状态。
答案 0 :(得分:1)
通过禁用防火墙,身份验证被禁用,因此用户无法通过您的应用程序进行身份验证。
但是授权(security.access_control
)仍处于活动状态。因此,用户仍然需要获得角色才能访问这些路径,并且无权获取角色。
除了更改防火墙设置之外,您还需要为每个环境定义不同的access_control
规则。
您无法覆盖其他文件中的security.access_control
设置,如果尝试这样做,将会得到一个错误提示:
配置路径“ security.access_control”不能被覆盖。您必须在一个配置部分中定义此路径的所有选项及其任何子路径。
因此,您可能需要为每个环境使用不同的security.yaml
文件,定义所有必要的访问控制规则。