gloomers/htpasswd

此symfony用户提供程序从htpasswd文件读取用户。

安装: 13

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 0

分支: 1

类型:symfony-bundle

dev-master 2021-01-01 16:49 UTC

This package is auto-updated.

Last update: 2024-09-29 05:56:13 UTC


README

Latest Stable Version Total Downloads License PHP v7.2 Symfony 4

此symfony用户提供程序从htpasswd文件读取用户。

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

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

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

目录

需求

必须使用PHP v7.2Symfony 4

集成与基本用法

安装

请通过composer进行安装。

composer require prokki/htpasswd "^0.0"

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

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 }

请自由使用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 配置参数,请确保包含所有必要的角色。没有添加其他默认用户角色的过程。

另外请注意,角色

  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/whitehat101apr1-md5 算法的实现。