72 votes

Comment faire de l'authentification HTTP dans android?

Je suis de la vérification de la classe org.apache.http.auth. Plus de référence ou par exemple si quelqu'un a?

116voto

m3n0R Points 2333

Pour moi, cela a fonctionné,

final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP)

Apache HttpCLient:

request.setHeader("Authorization", basicAuth);

HttpUrlConnection:

connection.setRequestProperty ("Authorization", basicAuth);

78voto

Chris Boyle Points 6194

Je n'ai pas rencontré ce paquet en particulier avant, mais il dit que c'est pour le côté client d'authentification HTTP, que j'ai été capable de faire sur Android à l'aide de l' java.net Api, comme suit:

Authenticator.setDefault(new Authenticator(){
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("myuser","mypass".toCharArray());
    }});
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setUseCaches(false);
c.connect();

Bien évidemment votre getPasswordAuthentication() devrait probablement faire quelque chose de plus intelligent que de retourner une constante.

Si vous êtes en essayant de faire une demande auprès d'un organisme (par exemple, POST) avec une authentification, méfiez-vous des Android question 4326. J'ai lié un correctif proposé à la plate-forme, mais il y a une solution simple si vous ne voulez Basic auth: ne vous embêtez pas avec Authentificateur, et au lieu de faire ceci:

c.setRequestProperty("Authorization", "basic " +
        Base64.encode("myuser:mypass".getBytes()));

14voto

Dmitry Sitnikov Points 553

Vous pouvez insérer manuellement en-tête http de la demande:

HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));

13voto

GWu Points 1687

Méthode manuelle fonctionne bien avec l'import android.util.Base64, mais assurez-vous de mettre en Base64.NO_WRAP sur l'appel de coder:

String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);

3voto

Oke Uwechue Points 66

Pour mon Android des projets, j'ai utilisé le Base64 de la bibliothèque à partir d'ici:

http://iharder.net/base64

C'est une très vaste bibliothèque et jusqu'à présent je n'ai eu aucun problème avec elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X