2010-10-21 9 views
13

Sto utilizzando l'autenticazione di base. Se la mia password contiene due punti, mi sembra di non riuscire ad autenticarmi. I due punti non sono consentiti in una password? Come sto autenticando:La password con due punti fallisce l'autenticazione di base?

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")); 

Le password senza due punti funzionano sempre. Le password con due punti sempre falliscono. Devo in qualche modo sfuggire la password prima di passarla al costruttore della classe UsernamePasswordCredentials? So che basicauth usa il nome utente/password separati da due punti, quindi codificati in base64, è questo il problema?

Grazie

---- Aggiornamento ------

Grazie a tutti, si è verificato un problema nel server che stavo comunicando con!

risposta

22

Dovrebbe funzionare. RFC2617 è la RFC attorno all'autenticazione HTTP. La specifica non pone alcuna restrizione sui caratteri utilizzati all'interno di una password, ma solo sul nome utente;

Per ricevere l'autorizzazione, il client invia l'ID utente e la password, separati da un solo due punti (":") carattere, all'interno di un base64 [7] stringa codificata nelle credenziali.

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

La separazione del nome utente e della password viene eseguita nella prima posizione di due punti nella stringa decrittografata, credo. Quindi, il nome utente può contenere due punti e rimanere indenne? –

5

Se il server ha un bug nella separazione di Base64 "nomeutente: password", il metodo di autenticazione fallirà. Controlla il tuo server (forse ci sono aggiornamenti disponibili? Vai con un altro server?), Non usare i due punti nelle tue password, o usa un metodo di autenticazione diverso.

Per curiosità, su quale server si sta tentando di eseguire l'autenticazione?

+0

+1 interessato a sentire quale server si tratta. –

1

So che questo è un vecchio post, ma nel caso in cui altri corrono lo stesso problema:

Il codice in new UsernamePasswordCredentials("me", "password:test")); potrebbe dividere la stringa su ogni colon. Ecco un esempio in PHP che verrebbe a mancare:

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

Ecco una correzione:

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

Si noti che [la funzione] (http://php.net/manual/en/function.explode.php) 'explode()' accetta anche '$ limit' come terzo elemento.La correzione può essere semplificata a questo: '$ bits = explode (':', $ auth_string, 2); $ utente = $ bit [0]; $ password = $ bit [1]; '. –

0

Proprio avuto un problema con i due punti nella password. Sembra che il nome utente e la password non vengano divisi correttamente.

Esempio User: Pass: parola

Nel mio caso la password consegnata in PHP era solo "passare" invece di "pass: parola".

Ho imparato ad evitare caratteri speciali come: (due punti) e @ (at) nella password. È un po 'strano, perché la stessa logica ha funzionato correttamente prima di essere aggiornati a php-fpm (non so se questo problema appartiene a php-fpm).

Problemi correlati