Autenticação básica sem distinção entre maiúsculas e minúsculas com Apache

Autenticação básica sem distinção entre maiúsculas e minúsculas com Apache

É possível configurar um servidor Apache para aceitarnomes de usuário que não diferenciam maiúsculas de minúsculaspara autenticação básica?

Atualmente estou usando um padrão semelhante a este (em um arquivo incluído) no meuhttpd.conf

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

As senhas ainda devem diferenciar maiúsculas de minúsculas.

Responder1

Vamos supor que você possa criar seus nomes de usuário de arquivo de autenticação no mesmo caso. Digamos que eles estejam em letras maiúsculas.

Para conseguir o que você deseja, eu:

  1. use mod_rewrite com umRewriteMapisso chamaria um script python (ou outro)
  2. no roteiro,
    1. base64 decodifica o cabeçalho de autenticação
    2. coloque o nome do usuário em maiúscula (a parte antes da coluna)
    3. base64 codifica o cabeçalho de autenticação
  3. Use o novo cabeçalho de autenticação em letras maiúsculas

Não tenho a configuração para testá-lo, mas para lhe dar uma vantagem inicial, aqui está um script Python que implementa a ideia (ênfase na clareza, pode ser mais curto):

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

Parasenha bem conhecida:

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

O script coloca o nome de usuário em letras maiúsculas:

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

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

Advertência: este código falhará se você tiver caracteres não-ascii no nome de usuário. étudiant78fica éTUDIANT78na minha máquina.

informação relacionada