Apache 不區分大小寫的基本驗證

Apache 不區分大小寫的基本驗證

是否可以設定 Apache 伺服器來接受不區分大小寫的用戶名用於基本身份驗證?

目前,我正在使用與此類似的模式(在包含的文件中)httpd.conf

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

密碼仍應區分大小寫。

答案1

假設您可以在相同的情況下建立您的身份驗證檔案使用者名稱。假設它們是大寫的。

為了實現你想要的,我會:

  1. 使用 mod_rewrite 與RewriteMap這將調用 python (或其他)腳本
  2. 在腳本中,
    1. Base64 解碼 Authentication 標頭
    2. 將使用者名稱設為大寫(列之前的部分)
    3. 對 Authentication 標頭進行 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我的機器上。

相關內容