2010-10-21 21 views
13

Estoy usando autenticación básica. Si mi contraseña contiene dos puntos, parece que no me autentico. ¿Los dos puntos no están permitidos en una contraseña? Cómo estoy autenticando:¿La contraseña con dos puntos falla la autenticación básica?

DefaultHttpClient client = new DefaultHttpClient(); 
HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() { 
    ... 
}; 
client.addRequestInterceptor(preemptiveAuth, 0); 
client.getCredentialsProvider().setCredentials(
    new AuthScope("example.com", 443), 
    new UsernamePasswordCredentials("me", "password:test")); 

Las contraseñas sin dos puntos siempre funcionan. Las contraseñas con dos puntos siempre fallan. ¿Debo escapar de alguna manera de la contraseña antes de entregarla al constructor de la clase UsernamePasswordCredentials? Sé que basicauth usa el nombre de usuario/contraseña separados por dos puntos, luego codificado en base64, ¿ese es el problema aquí?

Gracias

---- ------ actualización

Gracias a todos, sí había un problema en el servidor me estaba comunicando con!

Respuesta

22

Debería funcionar. RFC2617 es el RFC alrededor de la autenticación HTTP. La especificación no pone ninguna restricción en los caracteres usados ​​dentro de una contraseña, solo en el nombre de usuario;

Para recibir la autorización, el cliente envía el ID de usuario y contraseña, separados por un solo carácter de dos puntos (":") dentro de una cadena codificada base64 [7] en las credenciales.

basic-credentials = base64-user-pass 
    base64-user-pass = <base64 [4] encoding of user-pass, 
         except not limited to 76 char/line> 
    user-pass = userid ":" password 
    userid  = *<TEXT excluding ":"> 
    password = *TEXT 
+0

Creo que la separación del nombre de usuario y la contraseña se realiza en la primera posición de dos puntos en la cadena descifrada. Entonces, ¿el nombre de usuario puede contener dos puntos y aún así estar intacto? –

5

Si el servidor tiene un error al separar ese Base64 "nombre de usuario: contraseña", el método de autenticación fallará. Ya sea que compruebe en su servidor (tal vez hay actualizaciones disponibles? Vaya con un servidor diferente?), No use dos puntos en sus contraseñas, o use un método de autenticación diferente.

Por curiosidad, ¿con qué servidor intentas autenticarte?

+0

+1 interesado en saber qué servidor es este. –

1

Sé que esto es una entrada antigua, pero en caso de que otros funcionan con el mismo problema:

El código en new UsernamePasswordCredentials("me", "password:test")); podría dividir la cadena en cada colon. Este es un ejemplo en PHP que fallaría:

$bits = explode(':',$auth_string); 
$user = $bits[0]; 
$password = $bits[1]; 

aquí es una solución:

$bits = explode(':',$auth_string); 
$user = array_shift($bits); 
$password = implode(':',$bits); 
+4

Tenga en cuenta que [la función] (http://php.net/manual/en/function.explode.php) 'explode()' también acepta '$ limit' como un tercer elemento.La solución se puede simplificar a esto: '$ bits = explode (':', $ auth_string, 2); $ usuario = $ bits [0]; $ password = $ bits [1]; '. –

0

Sólo tuvimos un problema con dos puntos en la contraseña. Parece que el nombre de usuario y la contraseña no se dividirán correctamente.

Ejemplo Usuario: Clave: palabra

En mi caso, la contraseña entregada en PHP era simplemente "pasan" en lugar de "paso: la palabra".

He aprendido a evitar caracteres especiales como: (dos puntos) y @ (a) en la contraseña. Es un poco extraño, porque la misma lógica funcionó correctamente antes de actualizar a php-fpm (no sé si este problema pertenece a php-fpm).

Cuestiones relacionadas