3

Можно ли настроить сервер Apache для приема нечувствительных к регистру имен пользователей для базовой аутентификации?

В настоящее время я использую шаблон, похожий на этот (во включенном файле) в моем httpd.conf

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

Пароли все еще должны быть чувствительными к регистру.

1 ответ1

2

Давайте предположим, что вы можете использовать свои имена пользователей для файла аутентификации в том же случае. Допустим, они прописные.

Чтобы получить то, что вы хотите, я бы:

  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 на моей машине.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .