prokki / htpasswd
这个symfony用户提供者从htpasswd文件中读取用户。
Requires
- php: >=8.0.1
- symfony/config: ^6.0
- symfony/dependency-injection: ^6.0
- symfony/http-kernel: ^6.0
- symfony/password-hasher: ^6.0
- symfony/security-core: ^6.0
- whitehat101/apr1-md5: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-29 06:14:19 UTC
README
这个symfony用户提供者从htpasswd文件中读取用户。
要使用htpasswd文件,您需要执行以下三个步骤
- 运行composer安装程序包
- 配置您的安全配置
- 创建一个htpasswd密码存储文件。
支持基本认证的所有可用密码格式:apr1-md5
、bcrypt
、crypt
、sha1
和纯文本 - 请参阅https://httpd.apache.ac.cn/docs/current/misc/password_encryptions.html。
目录
需求
建议使用PHP ≥ v8.0.2和Symfony ≥ 6。
集成与基本用法
安装
请通过composer安装。
composer require prokki/htpasswd
程序包将自动添加到您的bundles.yaml
配置文件中。
Symfony v4, Symfony v5
要使用较旧的Symfony/PHP版本,请使用版本0.*
。
composer require prokki/htpasswd "~0.0"
Symfony配置
要启用此功能,您必须手动更改安全配置。
- 在您的安全配置中启用提供者HtpasswdUserProvider和编码器HtpasswdEncoder,即在您的
%kernel.project_dir%/config/security.yaml
文件中。 - 要启用HTTP基本认证,请将
http_basic
认证方法添加到防火墙配置中。 - 此外,请确保至少为某个路径启用access_control。
security.yaml
:
security: # 1.a) add the HtpasswdUserProvider as a new provider (the name does not matter) providers: bz_map_cycle_provider: id: Htpasswd\Security\HtpasswdUserProvider # 1.b) and add the HtpasswdEncoder as a new encoder (the name does not matter) encoders: Symfony\Component\Security\Core\User\User: id: Htpasswd\Security\HtpasswdEncoder # 2. enable basic authentication firewalls: main: http_basic: ~ # 3. be sure to add one path access_control: - { path: ^/, roles: ROLE_USER }
请尽情使用Symfony安全层的全部灵活性,这意味着例如您可以
- 链接防火墙
- 添加其他提供者和编码器
- 仅将基本认证限制在特定路径上
- 等。
添加htpasswd文件
使用项目目录中的htpasswd命令创建自定义htpasswd文件。
提示:通常,如果您运行的是apache网络服务器(例如,如果您使用xampp或您的包管理系统),则该命令会自动安装。在Linux系统中,该命令通常由apache2-utils
包提供。
在您的项目目录中创建一个htpasswd文件。键入以下命令并输入您的密码
htpasswd -cB .htpasswd admin
在您的项目中已创建新文件
%kernel.project_dir%/
- config/
- packages/
- security.yaml <-- do not forget to change your configuration
- bundles.yaml
- services.yaml
- src/
- Controller/
- Entity/
- Service/
- [...]
- tests/
- composer.json
- .htpasswd <-- new htpasswd file in your project directory
⚠️ 为了安全起见,我们建议不要将htpasswd文件包含在您的存储库中!
高级用法与配置
您实际上无法更改捆绑包的配置,但至少您可以自定义 htpasswd 文件的位置和默认用户角色。
在这两种情况下,您都需要为捆绑包创建一个新的配置文件 htpasswd.yaml
。
%kernel.project_dir%/
- config/
- packages/
- security.yaml
- htpasswd.yaml <-- custom configuration file
该文件的默认内容应如下所示。如果您仅插入这些配置,捆绑包将使用默认设置工作。
htpasswd: path: ~ # the path of your htpasswd file, ie. "%kernel.project_dir%/public/passwords.txt" roles: ~ # the default roles of each basic auth user
更改htpasswd文件位置
可以通过更改 path
变量来更改默认位置。
如果您在其他项目中使用 htpasswd 文件,或者通过 Apache2 配置设置基本身份验证,这将非常有用。
htpasswd: path: "/etc/apache2/.htpasswd" roles: ~
更改默认用户角色
默认用户角色分配给每个用户(由 HtpasswdUserProvider 包含)是 ROLE_USER。要更改默认用户角色,请修改配置中的 roles
变量。
htpasswd: path: ~ roles: ["ROLE_ADMIN", "ROLE_ALLOW_WRITE", ...]
如果您更改了 roles
配置参数,请确保包含所有必要的角色。没有添加其他默认用户角色的过程。
另外,请确保这些角色
- 遵循 symfony 用户角色 的建议,并且
- 与您的
security.yaml
文件中的 access_control 设置相匹配。
htpasswd文件中的用户角色
基本身份验证的实现允许您在 htpasswd 文件的每一行末尾添加用户角色。
类似于通过配置覆盖用户角色,请确保
- 遵循 symfony 用户角色 的建议,并且
- 与您的
security.yaml
文件中的 access_control 设置相匹配。
用户角色是一个以逗号分隔的列表,与原始行之间以冒号分隔。例如
user:$2y$05$G0q46R6tXNYmGnwHK74hyuUsz.IlCoVoOlMLjuLdgi.hWvwuqAr8G:ROLES_A,ROLES_B,ROLES_C
⚠️ 该功能可能不支持所有平台!
良好结构的 htpasswd 文件内容
# encoded by bcrypt, pass: admin1
admin1:$apr1$j0jl5669$vMiAX1Dxz4li8GACC0bJ1/
# encoded by apr1-md5, pass: admin2
admin2:$2y$05$.im1AvKvAVUTl6rlbY8ycu8iz6Q3.BhMsrZVVZb.agFCQ0u1aTzKa
# encoded by crypt, pass: admin3
admin3:WArkJFYVv3SDU
# encoded by sha1, pass: admin4
admin4:{SHA}6gU9Eaiq0cz4wY+SQbrrnsR+XWQ=
# not encoded / plain text
admin5:admin5
带有附加用户角色的 htpasswd 文件内容
# encoded by bcrypt, pass: admin1, user roles ROLE_USER and ROLE_ADMIN
admin1:$apr1$j0jl5669$vMiAX1Dxz4li8GACC0bJ1/:ROLE_USER,ROLE_ADMIN
# encoded by apr1-md5, pass: admin2, user roles ROLE_USER and ROLE_SUPERVISOR
admin2:$2y$05$.im1AvKvAVUTl6rlbY8ycu8iz6Q3.BhMsrZVVZb.agFCQ0u1aTzKa:ROLE_USER,ROLE_SUPERVISOR
# encoded by crypt, pass: admin3, user roles ROLE_READ_ONLY
admin3:WArkJFYVv3SDU:ROLE_READ_ONLY
# encoded by sha1, pass: admin4, user roles ROLE_USER and ROLE_ADMIN
admin4:{SHA}6gU9Eaiq0cz4wY+SQbrrnsR+XWQ=:ROLE_USER,ROLE_ADMIN
# not encoded / plain text
admin5:admin5
鸣谢
非常感谢 https://github.com/whitehat101 为实现 apr1-md5
算法做出的贡献。