Encontrar el usuario actual autenticado mediante autenticación básica (Apache)

Encontrar el usuario actual autenticado mediante autenticación básica (Apache)

Cuando inicia sesión a través de una página de autenticación básica, ¿el nombre de usuario que autenticó se almacena en algún lugar (en el servidor o en la máquina cliente), tal vez en una variable de entorno?

Fondo: Tengo una página de administración web común para un servidor de correo electrónico y me gustaría saber quién está haciendo qué. Cuando un usuario inicia sesión exitosamente mediante autenticación básica, de alguna manera quiero poder identificarlo y registrar sus acciones. Entonces, cada vez que se envía una solicitud, puedo escribir en un archivo de registro. El formato básico sería:

$username ran a $function against $useraccount

entonces, si un usuario cambió los permisos de alguien, por ejemplo:

Admin-Bob ran a permission change against User-Scott

Entonces, si se producen errores, puedo rastrear fácilmente en el archivo de registro qué acciones conducen a la causa. Intenté comprobar el %ENVhash sin éxito, ¿alguna idea?

Realmente no quiero entrar en sesiones similares a PHP, porque eso significaría eliminar mi autenticación básica, que ya me da un buen grado de control. Si tengo que codificar algo con sesiones, necesitaría implementar un sistema para bloquear a los usuarios después del máximo de intentos, etc., algo que realmente no quiero codificar. Creo que esto está mejor orientado hacia la falla del servidor porque pertenece más a Apache que al lenguaje de programación. Las sesiones se pueden realizar en multitud de idiomas.

Respuesta1

El nombre de usuario estará disponible en la variable de entorno REMOTE_USER.

Esto funciona para casi todos los métodos de autenticación, en caso de que alguna vez comience a utilizar la autenticación implícita o incluso la autenticación Kerberos.

Respuesta2

Shtééf ya lo mencionó $ENV{'REMOTE_USER'}, pero si está usando CGI.pm, la remote_user()función también lo devuelve.

my $cgi = CGI->new();
print $cgi->remote_user(); # Prints user name

Respuesta3

En realidad, es una variable del servidor, no del entorno.

PHP_AUTH_USER y AUTH_USER deberían funcionar.

información relacionada