Можно ли настроить сервер 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 декодирует заголовок аутентификации
- сделать имя пользователя заглавным (часть перед столбцом)
- 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
на моем компьютере.