Groß-/Kleinschreibung ignorierende Basisauthentifizierung mit Apache

Groß-/Kleinschreibung ignorierende Basisauthentifizierung mit Apache

Ist es möglich, einen Apache-Server so zu konfigurieren, dass erBenutzernamen ohne Berücksichtigung der Groß-/Kleinschreibungfür die Basisauthentifizierung?

Derzeit verwende ich ein ähnliches Muster (in einer enthaltenen Datei) in meinemhttpd.conf

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

Bei Passwörtern muss weiterhin zwischen Groß- und Kleinschreibung unterschieden werden.

Antwort1

Nehmen wir an, Sie können die Benutzernamen in Ihren Authentifizierungsdateien in Großbuchstaben erstellen. Nehmen wir an, sie sind in Großbuchstaben geschrieben.

Um zu erreichen, was Sie wollen, würde ich:

  1. verwenden Sie mod_rewrite mit einemRewriteMapdas würde ein Python-Skript (oder ein anderes) aufrufen
  2. im Skript,
    1. Base64-Dekodierung des Authentifizierungsheaders
    2. Machen Sie den Benutzernamen groß (den Teil vor der Spalte)
    3. Base64-Kodierung des Authentifizierungsheaders
  3. Verwenden Sie den neuen Authentifizierungsheader in Großbuchstaben

Ich habe nicht das nötige Setup, um es zu testen, aber um Ihnen einen Vorsprung zu verschaffen, hier ein Python-Skript, das die Idee umsetzt (Hervorhebung aus Gründen der Klarheit, es könnte kürzer sein):

#!/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))

Für einbekanntes Passwort:

$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | openssl base64 -d
Aladdin:open sesame

Das Skript konvertiert den Benutzernamen in Großbuchstaben:

$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | python uppercase_basic.py
QUxBRERJTjpvcGVuIHNlc2FtZQ==

$ echo QUxBRERJTjpvcGVuIHNlc2FtZQ== | openssl base64 -d
ALADDIN:open sesame

Vorbehalt: Dieser Code schlägt fehl, wenn der Benutzername keine ASCII-Zeichen enthält. étudiant78wird éTUDIANT78auf meinem Computer angezeigt.

verwandte Informationen