authentification HTTP dans J2ME
Question
Je suis en train de créer une application J2ME, qui parle à l'aide webserver connecteur HttpConnection
.
Quand je parle au serveur web, je dois authentifier à l'aide auth HTTP de base, qui va normalement
http://username:password@website.com/rest/api/method
Mais J2ME, quand je construis une URL de cette forme, il ne fonctionne pas.
J'ai aussi essayé d'ajouter des biens de demande,
hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("User", "alagu");
hc.setRequestProperty("pass", "mypassword");
mais ne fonctionne pas.
Quelqu'un at-il fait auth HTTP basé sur J2ME avant? Merci à l'avance.
La solution
Il pourrait être J2ME n'a pas de support pour l'authentification de base, je peux me tromper. Si vous voulez essayer de régler simplement l'en-tête d'authentification dans la demande vous, vous aurez probablement besoin d'un en-tête différent de ce que vous utilisez.
Pour obtenir l'autorisation, le client envoie l'ID utilisateur et mot de passe, séparés par un seul deux points ( « : ») caractère, dans un base64 [7] chaîne codée dans les informations d'identification.
[...]
Si l'agent utilisateur souhaite envoyer le code d'utilisateur « Aladdin » et mot de passe « Sésame », il utiliserait le champ d'en-tête suivant:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Il suffit donc de créer la chaîne « Utilisateur: Mot de passe », base64 encoder puis appeler setRequestProperty("Authorization", "Basic "+ encodedUserAndPass)
Autres conseils
Incroyable, cela fonctionne comme un charme:
String url = "hppt://www.example.com";
HttpConnection hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("Authorization", "Basic "+ BasicAuth.encode("user", "password"));
je base64 encodeur / décodeur de bibliothèque cryptographique Bouncy Castle. Il est très puissant pour surmonter beaucoup de limites définies par l'API Java ME / J2ME. Il est open source et il fonctionne aussi bien pour Java ME et Android.