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

Связанный контент