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:
- verwenden Sie mod_rewrite mit einem
RewriteMap
das würde ein Python-Skript (oder ein anderes) aufrufen - im Skript,
- Base64-Dekodierung des Authentifizierungsheaders
- Machen Sie den Benutzernamen groß (den Teil vor der Spalte)
- Base64-Kodierung des Authentifizierungsheaders
- 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. étudiant78
wird éTUDIANT78
auf meinem Computer angezeigt.