gloomers / htpasswd
此symfony用户提供程序从htpasswd文件读取用户。
Requires
- php: >=7.2.0
- symfony/config: ^4.3|^5.2
- symfony/dependency-injection: ^4.3|^5.2
- symfony/flex: ^1.4
- symfony/security-bundle: ^4.3|^5.2
- whitehat101/apr1-md5: ^1.0
Requires (Dev)
- phpunit/phpunit: ^8.2
This package is auto-updated.
Last update: 2024-09-29 05:56:13 UTC
README
此symfony用户提供程序从htpasswd文件读取用户。
要使用htpasswd文件,您需要执行以下三个步骤:
- 运行composer安装程序包,
- 配置您的安全配置,
- 创建一个htpasswd密码存储文件。
支持基本认证的所有可用密码格式:apr1-md5
、bcrypt
、crypt
、sha1
和纯文本 - 请参阅https://httpd.apache.ac.cn/docs/current/misc/password_encryptions.html。
目录
需求
集成与基本用法
安装
请通过composer进行安装。
composer require prokki/htpasswd "^0.0"
程序包将自动添加到您的bundles.yaml
配置文件中。
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 }
请自由使用Symfoniy安全层的全部灵活性,这意味着您可以,例如:
- 链式防火墙,
- 添加其他提供程序和编码器,
- 仅将基本认证限制在特定路径上
- 等等。
添加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
算法的实现。