2011-02-08 18 views
6

Por alguna razón no puedo hacer que la Autenticación básica funcione con PHP en mi servidor. Estoy utilizando el código exacto de la página del manual:La autenticación básica con PHP proporciona un bucle infinito

<?php 
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
    exit; 
} else { 
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; 
} 
?> 

Sin embargo, cuando lo ejecuto, que nunca puede ir más allá de la indicación.

Si pongo este mismo código en mi otro servidor, funciona bien.

¿Alguien sabe lo que podría estar causando esto? Ambos servidores son pilas WAMP y Apache tiene habilitado el auth_basic_module. Los archivos PHP.ini son prácticamente idénticos también.

Eché un vistazo a los encabezados y después de ingresar mi nombre de usuario/contraseña, se está enviando el encabezado "Autorización: Basic XXXXXX".

+0

prueba un 'diff' en los dos archivos' php.ini', en caso de que te falte algo. También podrías comparar los confs apache. – ocodo

+0

Referencia: http://www.php.net/manual/en/features.http-auth.php –

Respuesta

9

Esto depende de la interfaz PHP utilizada. La variable de entorno PHP_AUTH_USER solo se usa para mod_php y si Apache ayudó.

Si inicializa la autorización del script, entonces tiene que buscar el encabezado HTTP_AUTHORIZATION y decodificarlo y dividirlo usted mismo. Mira este comentario: http://www.php.net/manual/en/features.http-auth.php#94349

Para las configuraciones de FastCGI o las invunciones de suexec es posible que ni siquiera tengas ese encabezado presente en las variables de entorno. Está filtrado como precaución de seguridad. La solución común es reescribir la cabecera utilizando una regla de .htaccess:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

De este modo pasa a estar disponible con con mayúsculas y minúsculas como $_SERVER["HTTP_Authorization"].

+0

Estoy marcando su respuesta como la respuesta porque fue extremadamente útil. No sé por qué (quizás lo haga), pero la variable de entorno HTTP_AUTHORIZATION se renombró a REDIRECT_HTTP_AUTHORIZATION. Puedo verificarlo, cambiarle el nombre a HTTP_AUTHORIZATION y luego continuar con el código como se indica en el comentario manual de php que publicó. – Brandon0

+0

@ Brandon0: El prefijo 'REDIRECT_' es otra peculiaridad de la variante FastCGI de PHP. Pero nunca supe en qué circunstancias lo hace y qué ajustes de configuración lo desencadenan. – mario

+0

@ Brandon0 Estoy teniendo el mismo problema pero no pude entender cuál es la solución que ha implementado para solucionarlo. ¿Puedes compartir los cambios que has hecho en el código? – DMEM