Aller au contenu

authentification a un server distant


diengkals

Recommended Posts

bonjour , je doit me connecter a un server webphsere pour récupérer mes données pour cela je doit d abord m authenfier(j arrive a recuperer à partir d un web service les données accessible sans authentification mais mon problème se pose au niveau d authentification ) . j ai cherché quelque chose sur le net mais toujours sans succes . je vous met mon code voir si j ai pas fait des erreur de code . merci d avance




public class Authentification extends Activity {
       /** Called when the activity is first created. */
       String response;
       final String username = "19851985";
       String result;
       final String password = "android85";

       HttpResponse httpresponse;
       InputStream chaine;

       final String proxyHost = "localhost";
       final int proxyPort = 80;

       String url = "http://10.0.2.2/webapp/wcs/stores/servlet/AddressBookForm?storeId=10101&catalogId=10101&langId=-2";

       HttpEntity entity;
       @Override
       public void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.main);

               DefaultHttpClient client = new DefaultHttpClient();
               AuthScope authScope = new AuthScope(null,-1, AuthScope.ANY_REALM);
               Credentials credential = new UsernamePasswordCredentials(username, password);      
               client.getCredentialsProvider().setCredentials(authScope, credential); 

               HttpGet httpGet = new HttpGet(url);
               httpGet.addHeader("User-Agent", "Android");
               HttpConnectionParams.setConnectionTimeout(client.getParams(), 15000);

                       httpresponse = client.execute(httpGet);
               entity = httpresponse.getEntity();
                       chaine = entity.getContent();
                       result = stream2String(chaine);


               JSONArray jsonOrdArray =  new JSONArray(result);;


               for (int i = 0; i < jsonOrdArray.length(); i++) {
                       Order order = new Order();
                       JSONObject commande =  jsonOrdArray.getJSONObject(i);;


                               order.reference = commande.getString("reference");

               }



       }

       private String stream2String(InputStream stream)
                       throws UnsupportedEncodingException {
               String charSet = "iso-8859-1";
               InputStreamReader reader = new InputStreamReader(stream, charSet);

               BufferedReader buffer = new BufferedReader(reader);
               StringBuilder sb = new StringBuilder();
               try {
                       String cur;
                       while ((cur = buffer.readLine()) != null) {
                               sb.append(cur);
                       }
               } catch (IOException e) {
                       e.printStackTrace();
               }
               try {
                       stream.close();
               } catch (IOException e) {
                       e.printStackTrace();
               }
               return sb.toString();
       }

}

Lien vers le commentaire
Partager sur d’autres sites

merci pour votre reponse au fait j ai reverifier mon code et j ai trouvé que les erreurs venaient de la requete https . au fait je travaille sur un serveur qui utilise des requete https et le certificat fournit n est pas confiant je voulais savoir comment contouner la requete pour pouvoir ce connecter comme on le fait sur navigateur

voici les erreur que ça me genere

06-14 17:09:19.977: WARN/PackageManager(69): Code path for pkg : com.connexion changing from /data/app/com.connexion-1.apk to /data/app/com.connexion-2.apk
06-14 17:09:19.977: WARN/PackageManager(69): Resource path for pkg : com.connexion changing from /data/app/com.connexion-1.apk to /data/app/com.connexion-2.apk
06-14 17:09:21.367: WARN/RecognitionManagerService(69): no available voice recognition services found
06-14 17:09:26.648: WARN/System.err(724): javax.net.ssl.SSLException: Not trusted server certificate
06-14 17:09:26.648: WARN/System.err(724):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)
06-14 17:09:26.648: WARN/System.err(724):     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)
06-14 17:09:26.659: WARN/System.err(724):     at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
06-14 17:09:26.669: WARN/System.err(724):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164)
06-14 17:09:26.690: WARN/System.err(724):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
06-14 17:09:26.690: WARN/System.err(724):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
06-14 17:09:26.690: WARN/System.err(724):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)
06-14 17:09:26.708: WARN/System.err(724):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
06-14 17:09:26.708: WARN/System.err(724):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
06-14 17:09:26.708: WARN/System.err(724):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
06-14 17:09:26.727: WARN/System.err(724):     at com.connexion.Authentification$1.run(Authentification.java:86)
06-14 17:09:26.727: WARN/System.err(724): Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
06-14 17:09:26.758: WARN/System.err(724):     at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)
06-14 17:09:26.758: WARN/System.err(724):     at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)
06-14 17:09:26.803: WARN/System.err(724):     ... 10 more
06-14 17:09:26.813: WARN/System.err(724): Caused by: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
06-14 17:09:26.820: WARN/System.err(724):     at org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:149)
06-14 17:09:26.828: WARN/System.err(724):     at java.security.cert.CertPathValidator.validate(CertPathValidator.java:202)
06-14 17:09:26.828: WARN/System.err(724):     at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:164)
06-14 17:09:26.839: WARN/System.err(724):     ... 11 more

Modifié par AndroidRim
Lien vers le commentaire
Partager sur d’autres sites

Etant en vacances jai pas acces a mes codes mais en gros sur internet mais en gros cherche un peu avec google. En gros la plus simple des solutions est decrire un connecteur (surcharge) qui check pas le certificat [color=red]qd[/color] tu es en hhtps. Javais trouver ca sur un blog.

Si jamais tu trouves pas dici mon retour de conge jte copierai mon bout de code ici

jok

Message envoyé avec l'application Forum Frandroid

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Bonjour,

Je viens de rentrer de congé ^^

Tu trouvera deux types de solution :

1 - Accepter tous les types de certificats

http://stackoverflow.com/questions/995514/https-connection-android/1000205

http://stackoverflow.com/questions/2899079/custom-ssl-handling-stopped-working-on-android-2-2-froyo

2 - Accepter uniquement ton certificat autosigné

http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/

Voilà,

Jok

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je viens de rentrer de congé ^^

Tu trouvera deux types de solution :

1 - Accepter tous les types de certificats

http://stackoverflow.com/questions/995514/https-connection-android/1000205

http://stackoverflow.com/questions/2899079/custom-ssl-handling-stopped-working-on-android-2-2-froyo

2 - Accepter uniquement ton certificat autosigné

http://blog.antoine.li/index.php/2010/10/android-trusting-ssl-certificates/

Voilà,

Jok

merci bien Jok , maintenant j arrive a acceder au serveur via les requte https mais j ai un autre probleme qui est l authentification(login/password) . au fait j accède au ressources qui ne demande pas l'autorisation d’authentification(login/password) mais j arrive pas à accéder au ressources qui demande l'authentification(login/password ) et pourtant je pense avoir bien codé même le code de connexion me retourne 200 mais si je regarde au font qu'il ne récupère rien (il me retourne un tableau ) j ai testé avec mon navigateur web j ai trouvé si je m'authentifie les données sont retournées et si je m authentifie pas il me retourne un tableau null donc je conclu que l'authentification ne c est pas bien passé

voici comment je l ai codé


SchemeRegistry  registre= new SchemeRegistry();
	   registre.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 8002));
	   registre.register(new Scheme("https", new EasySSLSocketFactory(), 443));
	   params = new BasicHttpParams();
	   params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS,1);
	   params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new  ConnPerRouteBean(1));
	   params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
	   HttpProtocolParams.setVersion(params,HttpVersion.HTTP_1_1 );
	   HttpProtocolParams.setContentCharset(params,"utf8");
 [b] CredentialsProvider  credentialsProvider  = new BasicCredentialsProvider();
	  credentialsProvider.setCredentials( new AuthScope ("urlslogin",443),
		     new  UsernamePasswordCredentials(username, password));
	[/b]
		   context  = new BasicHttpContext();
		  context.setAttribute("http.auth.credentials-provider",credentialsProvider );
		   clienConnectionManager = new ThreadSafeClientConnManager(params,registre);
		 client = new  DefaultHttpClient(clienConnectionManager, params);
			  client.getCredentialsProvider();

j ai mis en gras la partie qui concerne l authentification

merci de votre aide

Modifié par AndroidRim
Lien vers le commentaire
Partager sur d’autres sites

Hello,

Je ne vois pas ou tu utilise ton context dans le code ^^

Je ne te vois pas non plus setter ton provider ^^

Jète un oeil sur google (stackOverFlow) il y a pas mal d'exemple.

Faut également voir coté serveur ? c'est bien du basic du digest ?

Bon courage

Jok

Lien vers le commentaire
Partager sur d’autres sites

Hello,

Je ne vois pas ou tu utilise ton context dans le code ^^

Je ne te vois pas non plus setter ton provider ^^

Jète un oeil sur google (stackOverFlow) il y a pas mal d'exemple.

Faut également voir coté serveur ? c'est bien du basic du digest ?

Bon courage

Jok

merci bien c vrai j ai pas mis tout le code ce qui du serveur j ai pas vrai accès ce qui fatigue c est serveur wcs(WebSphere Commerce Server ) . pouvez vous me donner plus d explication de l'utilisation de CredentialsProvider et basic du digest je comrpend pas bien

CredentialsProvider  credentialsProvider  = new BasicCredentialsProvider();
                 credentialsProvider.setCredentials( new AuthScope ("urlslogin",443),
                            new  UsernamePasswordCredentials(username, password));

voici comment j utilise le context et provider

SchemeRegistry  registre= new SchemeRegistry();
	   registre.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
	   registre.register(new Scheme("https", new EasySSLSocketFactory(), 443));
	   params = new BasicHttpParams();
	   params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS,1);
	   params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new  ConnPerRouteBean(1));
	   params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
	   HttpProtocolParams.setVersion(params,HttpVersion.HTTP_1_1 );
	   HttpProtocolParams.setContentCharset(params,"utf8");
      CredentialsProvider  credentialsProvider  = new BasicCredentialsProvider();
	  credentialsProvider.setCredentials( new AuthScope ("urlslogin",443),
		     new  UsernamePasswordCredentials(username, password));

		   context  = new BasicHttpContext();
		[b]  context.setAttribute("http.auth.credentials-provider",credentialsProvider );[/b]
      [b]    		httpResponse = client.execute(get,context);[/b]

le provider je le met dans le context

et merci de votre aide

Modifié par AndroidRim
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...