Autenticación básica que no distingue entre mayúsculas y minúsculas con Apache

Autenticación básica que no distingue entre mayúsculas y minúsculas con Apache

¿Es posible configurar un servidor Apache para aceptarnombres de usuario que no distinguen entre mayúsculas y minúsculaspara la autenticación básica?

Actualmente estoy usando un patrón similar a este (en un archivo incluido) en mihttpd.conf

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

Las contraseñas aún deben distinguir entre mayúsculas y minúsculas.

Respuesta1

Supongamos que puede crear los nombres de usuario del archivo de autenticación en el mismo caso. Digamos que están en mayúsculas.

Para lograr lo que quieres yo haría:

  1. utilizar mod_rewrite con unRewriteMapeso llamaría a un script de Python (u otro)
  2. en el guión,
    1. base64 decodifica el encabezado de autenticación
    2. poner el nombre de usuario en mayúscula (la parte antes de la columna)
    3. base64 codifica el encabezado de autenticación
  3. Utilice el nuevo encabezado de autenticación en mayúsculas

No tengo la configuración para probarlo, pero para darle una ventaja, aquí hay un script de Python que implementa la idea (énfasis en la claridad, podría ser más corto):

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

Paracontraseña bien conocida:

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

El script pone el nombre de usuario en mayúsculas:

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

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

Advertencia: este código fallará si tiene caracteres que no sean ASCII en el nombre de usuario. étudiant78se convierte éTUDIANT78en mi máquina.

información relacionada