Apache 模块 mod_auth_basic

Description:基本 HTTP 验证
Status:Base
Module Identifier:auth_basic_module
Source File:mod_auth_basic.c
Compatibility:在 Apache 2.1 及更高版本中可用

Summary

该模块允许使用 HTTP 基本身份验证通过在给定提供程序中查找用户来限制访问。 HTTP 摘要认证由mod_auth_digest提供。此模块通常应与至少一个身份验证模块(例如mod_authn_file)和一个授权模块(例如mod_authz_user)结合使用。

AuthBasicAuthoritative Directive

Description:设置是否将授权和身份验证传递给较低级别的模块
Syntax:AuthBasicAuthoritative On|Off
Default:AuthBasicAuthoritative On
Context:directory, .htaccess
Override:AuthConfig
Status:Base
Module:mod_auth_basic

通常,AuthBasicProvider中列出的每个授权模块都将尝试验证用户,如果在任何提供程序中都找不到该用户,则将拒绝访问。将AuthBasicAuthoritative指令显式设置为Off,可以在没有 用户 ID规则 与提供的用户 ID 匹配的情况下将身份验证和授权传递给其他基于非提供商的模块。仅当将mod_auth_basic与未使用AuthBasicProvider指令配置的第三方模块结合使用时,才需要这样做。使用此类模块时,处理 Sequences 由模块的源代码确定,并且不可配置。

AuthBasicFake Directive

Description:使用给定的用户名和密码表达式进行假基本认证
Syntax:AuthBasicFake off|username [password]
Default:none
Context:directory, .htaccess
Override:AuthConfig
Status:Base
Module:mod_auth_basic
Compatibility:Apache HTTP Server 2.4.5 及更高版本

指定的用户名和密码将合并到一个 Authorization Headers 中,该 Headers 将传递到 Web 服务器后面的服务器或服务。用户名和密码字段均使用expression parser解释,这允许根据请求参数设置用户名和密码。

如果未指定密码,将使用默认值“ password”。要禁用 URL 空间的伪基本认证,请指定“ AuthBasicFake off”。

在此示例中,我们将固定的用户名和密码传递给后端服务器。

Fixed Example

<Location "/demo">
    AuthBasicFake demo demopass
</Location>

在此示例中,我们传递从 Client 端证书中提取的电子邮件地址,从而扩展了SSLOptions指令中 FakeBasicAuth 选项的功能。与 FakeBasicAuth 选项一样,密码设置为固定字符串“ password”。

Certificate Example

<Location "/secure">
    AuthBasicFake "%{SSL_CLIENT_S_DN_Email}"
</Location>

扩展上面的示例,我们通过使用固定的密码对电子邮件地址进行哈希处理,然后将哈希传递给后端服务器来生成密码。这可用于进入不支持 Client 端证书的旧系统。

Password Example

<Location "/secure">
    AuthBasicFake "%{SSL_CLIENT_S_DN_Email}" "%{sha1:passphrase-%{SSL_CLIENT_S_DN_Email}}"
</Location>

Exclusion Example

<Location "/public">
    AuthBasicFake off
</Location>

AuthBasicProvider Directive

Description:设置此位置的身份验证提供程序
Syntax:AuthBasicProvider provider-name [provider-name] ...
Default:AuthBasicProvider file
Context:directory, .htaccess
Override:AuthConfig
Status:Base
Module:mod_auth_basic

AuthBasicProvider指令设置使用哪个提供程序来验证此位置的用户。默认的file提供程序由mod_authn_file模块实现。确保服务器中存在所选的提供程序模块。

Example

<Location "/secure">
    AuthType basic
    AuthName "private area"
    AuthBasicProvider  dbm
    AuthDBMType        SDBM
    AuthDBMUserFile    "/www/etc/dbmpasswd"
    Require            valid-user
</Location>

依次查询提供者,直到提供者找到与所请求用户名的匹配项为止,此时唯一的提供者将尝试检查密码。验证密码失败不会导致控制权传递给后续提供者。

提供者由mod_authn_dbmmod_authn_filemod_authn_dbdmod_authnz_ldapmod_authn_socache实现。

AuthBasicUseDigestAlgorithm Directive

Description:按照身份验证提供程序检查密码,就好像摘要身份验证已生效而不是基本身份验证一样。
Syntax:AuthBasicUseDigestAlgorithm MD5|Off
Default:AuthBasicUseDigestAlgorithm Off
Context:directory, .htaccess
Override:AuthConfig
Status:Base
Module:mod_auth_basic
Compatibility:Apache HTTP Server 2.4.7 和更高版本

通常,在使用基本身份验证时,AuthBasicProvider中列出的提供程序会尝试通过检查其数据存储中是否存在匹配的用户名和关联的密码来验证用户。存储的密码通常是加密的,但不一定要加密;每个提供商可以选择自己的密码存储方案。

当使用AuthDigestProvider和摘要式身份验证时,提供程序会执行类似的检查以在其数据存储中找到匹配的用户名。但是,与“基本身份验证”情况不同,与每个存储的用户名关联的值必须是由用户名,领域名称和密码组成的加密字符串。 (有关此加密字符串使用的格式的更多详细信息,请参见RFC 2617 第 3.2.2.2 节。)

由于基本身份验证和摘要身份验证之间存储的值不同,从摘要身份验证转换为基本身份验证通常需要为所有用户分配新密码,因为他们现有的密码无法从强加给提供者的密码存储方案中恢复支持摘要式身份验证。

AuthBasicUseDigestAlgorithm指令设置为MD5将导致使用与摘要身份验证相同的加密格式来检查用户的基本身份验证密码。首先,由用户名,领域名称和密码组成的字符串用 MD5 进行哈希处理;然后将用户名和此加密的字符串传递到AuthBasicProvider中列出的提供者,就像将AuthType设置为Digest一样,并且摘要身份验证已生效。

通过使用AuthBasicUseDigestAlgorithm,站点可以从摘要身份验证切换为基本身份验证,而无需为用户分配新密码。

Note

从基本身份验证切换到摘要身份验证而不分配新密码的逆过程通常是不可能的。仅当基本身份验证密码已以纯文本形式存储或采用可逆加密方案存储时,才有可能按照摘要身份验证密码存储方案来恢复它们并生成新的数据存储。

Note

AuthBasicUseDigestAlgorithm设置为MD5时,只有支持摘要身份验证的提供程序才可以对用户进行身份验证。使用其他提供程序将导致错误响应,并且 Client 端将被拒绝访问。