web-dev-qa-db-fra.com

Comment faire l'authentification HTTP dans Android?

Je vérifie la classe org.Apache.http.auth. Toute autre référence ou exemple si quelqu'un a?

71
Bohemian

Je n'ai jamais rencontré ce paquet particulier auparavant, mais il est indiqué que c'est pour l'authentification HTTP côté client, ce que j'ai pu faire sur Android en utilisant le Java.net API, comme ceci:

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

De toute évidence, votre getPasswordAuthentication () devrait probablement faire quelque chose de plus intelligent que de renvoyer une constante.

Si vous essayez de faire une demande avec un corps (par exemple, POST) avec authentification, méfiez-vous de Android, numéro 4326 . J'ai lié un correctif suggéré à la plate-forme, mais il existe une solution de contournement simple si vous ne voulez que l'authentification de base: ne vous embêtez pas avec Authenticator, mais plutôt procédez comme suit:

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

Pour moi, ça a marché,

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

Apache HttpCLient:

request.setHeader("Authorization", basicAuth);

HttpUrlConnection:

connection.setRequestProperty ("Authorization", basicAuth);
116
cesards

Vous pouvez insérer manuellement un en-tête http pour demander:

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

La méthode manuelle fonctionne bien avec l'importation Android.util.Base64, mais veillez à définir Base64.NO_WRAP lors de l'appel du code:

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

Pour mes Android projets, j’ai utilisé la bibliothèque Base64 à partir d’ici:

http://iharder.net/base64

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

3
Oke Uwechue

Ça marche pour moi

 URL imageUrl = new URL(url);
                    HttpURLConnection conn = (HttpURLConnection) imageUrl
                            .openConnection();
                    conn.setRequestProperty("Authorization", "basic " +
                            Base64.encode("username:password".getBytes()));
                    conn.setConnectTimeout(30000);
                    conn.setReadTimeout(30000);
                    conn.setInstanceFollowRedirects(true);
                    InputStream is = conn.getInputStream();
1
Cristiana Chavez