使用 Apache 进行不区分大小写的基本身份验证

使用 Apache 进行不区分大小写的基本身份验证

是否可以配置 Apache 服务器来接受不区分大小写的用户名用于基本身份验证?

目前,我正在我的httpd.conf

<Location "/admin/">
   AuthType Basic
   AuthName "Admin Area"
   AuthUserFile "/path/to/auth-file"
   Require valid-user
</Location>

密码仍应区分大小写。

答案1

假设您可以用相同的大小写创建 auth-file 用户名。假设它们都是大写的。

为了实现您的愿望,我会:

  1. 使用 mod_rewriteRewriteMap这将调用 python(或其他)脚本
  2. 在剧本中,
    1. 对身份验证标头进行 base64 解码
    2. 将用户名变为大写(列之前的部分)
    3. 对身份验证标头进行 base64 编码
  3. 使用新的大写身份验证标头

我没有设置来测试它,但为了让你领先一步,这里有一个实现该想法的 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

相关内容