prokki/htpasswd

这个symfony用户提供者从htpasswd文件中读取用户。

安装次数: 8,088

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 1

开放问题: 0

类型:symfony-bundle

1.0 2022-07-01 08:49 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:19 UTC


README

Latest Stable Version Total Downloads License PHP v8.0.2 Symfony 6

这个symfony用户提供者从htpasswd文件中读取用户。

要使用htpasswd文件,您需要执行以下三个步骤

  1. 运行composer安装程序包
  2. 配置您的安全配置
  3. 创建一个htpasswd密码存储文件。

支持基本认证的所有可用密码格式:apr1-md5bcryptcryptsha1和纯文本 - 请参阅https://httpd.apache.ac.cn/docs/current/misc/password_encryptions.html

目录

需求

建议使用PHP ≥ v8.0.2Symfony ≥ 6

集成与基本用法

安装

请通过composer安装。

composer require prokki/htpasswd

程序包将自动添加到您的bundles.yaml配置文件中。

Symfony v4, Symfony v5

PHP v7.2Symfony 4是强制性的。

要使用较旧的Symfony/PHP版本,请使用版本0.*

composer require prokki/htpasswd "~0.0"

Symfony配置

要启用此功能,您必须手动更改安全配置。

  1. 在您的安全配置中启用提供者HtpasswdUserProvider和编码器HtpasswdEncoder,即在您的%kernel.project_dir%/config/security.yaml文件中。
  2. 要启用HTTP基本认证,请将http_basic认证方法添加到防火墙配置中。
  3. 此外,请确保至少为某个路径启用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 配置参数,请确保包含所有必要的角色。没有添加其他默认用户角色的过程。

另外,请确保这些角色

  1. 遵循 symfony 用户角色 的建议,并且
  2. 与您的 security.yaml 文件中的 access_control 设置相匹配。

htpasswd文件中的用户角色

基本身份验证的实现允许您在 htpasswd 文件的每一行末尾添加用户角色。

类似于通过配置覆盖用户角色,请确保

  1. 遵循 symfony 用户角色 的建议,并且
  2. 与您的 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 算法做出的贡献。