如何针对特定环境覆盖 Symfony 的安全性?
How to override Symfony's security for a specific environment?
我正在尝试配置 Symfony 的安全组件,以便在特定环境 (travis
) 中没有为任何端点启用安全性。
我们将使用 Cypress 测试套件在 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
[...]
这对我来说表明所有路由的安全性都应该处于非活动状态。
通过禁用防火墙,身份验证 被禁用,因此用户无法通过您的应用进行身份验证。
但是授权 (security.access_control
) 仍然有效。所以用户仍然需要获取角色才能访问这些路径,而无法获取角色。
除了更改防火墙设置之外,您还需要为每个环境定义不同的 access_control
规则。
您不能覆盖不同文件中的 security.access_control
设置 如果您尝试这样做,您会收到一条错误消息:
Configuration path "security.access_control" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.
因此您可能需要为每个环境使用不同的 security.yaml
文件,定义所有必要的访问控制规则。
我正在尝试配置 Symfony 的安全组件,以便在特定环境 (travis
) 中没有为任何端点启用安全性。
我们将使用 Cypress 测试套件在 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
[...]
这对我来说表明所有路由的安全性都应该处于非活动状态。
通过禁用防火墙,身份验证 被禁用,因此用户无法通过您的应用进行身份验证。
但是授权 (security.access_control
) 仍然有效。所以用户仍然需要获取角色才能访问这些路径,而无法获取角色。
除了更改防火墙设置之外,您还需要为每个环境定义不同的 access_control
规则。
您不能覆盖不同文件中的 security.access_control
设置 如果您尝试这样做,您会收到一条错误消息:
Configuration path "security.access_control" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.
因此您可能需要为每个环境使用不同的 security.yaml
文件,定义所有必要的访问控制规则。