是否可以配置 Apache 服务器来接受不区分大小写的用户名用于基本身份验证?
目前,我正在我的httpd.conf
<Location "/admin/">
AuthType Basic
AuthName "Admin Area"
AuthUserFile "/path/to/auth-file"
Require valid-user
</Location>
密码仍应区分大小写。
答案1
假设您可以用相同的大小写创建 auth-file 用户名。假设它们都是大写的。
为了实现您的愿望,我会:
- 使用 mod_rewrite
RewriteMap
这将调用 python(或其他)脚本 - 在剧本中,
- 对身份验证标头进行 base64 解码
- 将用户名变为大写(列之前的部分)
- 对身份验证标头进行 base64 编码
- 使用新的大写身份验证标头
我没有设置来测试它,但为了让你领先一步,这里有一个实现该想法的 Python 脚本(强调清晰度,它可以更短):
#!/usr/bin/python
import base64
import sys
import string
#Get the header value
header = sys.stdin.readline()
#Base 64 decode it
authentication = base64.b64decode(header)
#Split username and password
userpass = authentication.split(':')
#Make username uppercase
userpass[0] = userpass[0].upper()
#Rebuild the authentication with the upper case username
authentication = string.join(userpass,':')
#Send the base64 result back
print (base64.b64encode(authentication))
为一个众所周知的密码:
$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | openssl base64 -d
Aladdin:open sesame
该脚本将用户名变为大写:
$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | python uppercase_basic.py
QUxBRERJTjpvcGVuIHNlc2FtZQ==
$ echo QUxBRERJTjpvcGVuIHNlc2FtZQ== | openssl base64 -d
ALADDIN:open sesame
警告:如果用户名中包含非 ASCII 字符,此代码将失败。在我的计算机上étudiant78
变成。éTUDIANT78