是否可以設定 Apache 伺服器來接受不區分大小寫的用戶名用於基本身份驗證?
目前,我正在使用與此類似的模式(在包含的文件中)httpd.conf
<Location "/admin/">
AuthType Basic
AuthName "Admin Area"
AuthUserFile "/path/to/auth-file"
Require valid-user
</Location>
密碼仍應區分大小寫。
答案1
假設您可以在相同的情況下建立您的身份驗證檔案使用者名稱。假設它們是大寫的。
為了實現你想要的,我會:
- 使用 mod_rewrite 與
RewriteMap
這將調用 python (或其他)腳本 - 在腳本中,
- Base64 解碼 Authentication 標頭
- 將使用者名稱設為大寫(列之前的部分)
- 對 Authentication 標頭進行 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
我的機器上。