IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tomcat et TomEE Java Discussion :

HttpClient : authentification Digest


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre régulier Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 84
    Points
    84
    Par défaut HttpClient : authentification Digest
    Bonjour,

    J'ai une application web sécurisé par mot de passe DIGEST MD5. Lorsque j'accède à ma servlet via Firefox, il me demande le login et mot de passe et on voit bien dans l'entête de la requête que le mot de passe n'est pas passé en clair (il y a le paramètre Authorization avec nonce).

    J'essaie d'appeler cette servlet par du code Java mais je reçois toujours une erreur 401 "La requête nécessite une authentification HTTP ()".

    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    GetMethod httpMethode = new GetMethod("http://localhost:8080/portail-raster-service/rasterServlet?");
    httpMethode.setDoAuthentication( true );
     
    HttpClient client = new HttpClient();
    client.getState().setCredentials(
    	new AuthScope("http://localhost:8080", 8080, null, "MD5"),
    	new UsernamePasswordCredentials("envol", "motdepasse")
    );
     
    client.executeMethod(httpMethode);
     
    if(httpMethode.getStatusCode() != HttpStatus.SC_OK) {
       System.out.println(httpMethode.getResponseBodyAsString());
    }
    else {
       System.out.println(httpMethode.getResponseBodyAsString());
    }
    J'ai essayé d'envoyer le mot de passe crypter avec la méthode suivante mais ça ne fonctionne pas mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    	public static String getEncodedPassword(String key) {
    		byte[] uniqueKey = key.getBytes();
    		byte[] hash = null;
    		try {
    			hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
    		} catch (NoSuchAlgorithmException e) {
    			throw new Error("no MD5 support in this VM");
    		}
    		StringBuffer hashString = new StringBuffer();
    		for ( int i = 0; i < hash.length; ++i ) {
    			String hex = Integer.toHexString(hash[i]);
    			if ( hex.length() == 1 ) {
    				hashString.append('0');
    				hashString.append(hex.charAt(hex.length()-1));
    			} else {
    				hashString.append(hex.substring(hex.length()-2));
    			}
    		}
    		System.out.println(hashString.toString());
    		return hashString.toString();
    	}
    Au niveau de mon web.xml, j'ai déclaré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    	<security-constraint>
    		<display-name>Sécurité sous Tomcat</display-name>
     
    		<web-resource-collection>
    		<web-resource-name>Ressource protégée</web-resource-name>
    		<url-pattern>/*</url-pattern>
    		<http-method>GET</http-method>
    		<http-method>POST</http-method>
    		</web-resource-collection>
     
    		<auth-constraint>
    		<role-name>envol</role-name>
    		</auth-constraint>
     
    	</security-constraint>
     
    	<login-config>
    		<auth-method>DIGEST</auth-method>
    		<realm-name>Authentification pour Tomcat</realm-name>
    	</login-config>
     
    	<!-- Rôles utilisés dans l'application -->
    	<security-role>
    	  <description>Administrateur</description>
    	  <role-name>envol</role-name>
    	</security-role>
    Et dans tomcat-users.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <role rolename="envol"/>
    <user password="motdepasse" roles="envol" username="envol"/>
    Merci de votre aide !
    WwAvE

  2. #2
    Membre régulier Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    J'ai un peu avancé. Ma webapp n'était pas bien configurée ni mon Tomcat pour nécessiter l'authentification par mot de passe cryptés en MD5 stocké dans un MemoryRealm.

    Ma configuration Tomcat est maintenant:
    server.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Context docBase="my_webapp" path="/my_webapp" reloadable="true">
    <Realm className="org.apache.catalina.realm.MemoryRealm" digest="MD5" pathname="conf/my_users.xml"/> 
    </Context>
    my_users.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <tomcat-users>
      <role rolename="envol"/>
      <user password="edb74dcd3c1302126bff192acdb631fe" roles="envol" username="envol"/>
    </tomcat-users>
    le web.wml de ma webapp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    	<security-constraint>
    		<display-name>Sécurité sous Tomcat</display-name>
     
    		<web-resource-collection>
    		<web-resource-name>Ressource protégée</web-resource-name>
    		<url-pattern>/*</url-pattern>
    		<http-method>GET</http-method>
    		<http-method>POST</http-method>
    		</web-resource-collection>
     
    		<auth-constraint>
    		<role-name>envol</role-name>
    		</auth-constraint>
     
    	</security-constraint>
     
    	<login-config>
    		<auth-method>DIGEST</auth-method>
    		<realm-name>Authentification pour Tomcat</realm-name>
    	</login-config>
     
    	<!-- Rôles utilisés dans l'application -->
    	<security-role>
    	  <description>Administrateur</description>
    	  <role-name>envol</role-name>
    	</security-role>

    Mon code Java pour accéder à cette webapp ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    GetMethod httpMethode = new GetMethod("http://localhost:8080/my_webapp/my_servlet?");
    httpMethode.setDoAuthentication( true );
    HttpClient client = new HttpClient();
    client.getState().setCredentials(
    	new AuthScope("http://localhost", 8080, null, "MD5"),
            new UsernamePasswordCredentials("envol", getEncodedPassword("motdepasse"))
    );
     
    client.executeMethod(httpMethode);
    if(httpMethode.getStatusCode() != HttpStatus.SC_OK) {
    	System.out.println(httpMethode.getResponseBodyAsString());
    }
    Le retour est : "La requête nécessite une authentification HTTP ()."

    Si vous avez des idées...
    Dans l'initialisation du Credentials j'ai essayé de mettre AuthScope.ANY_REALM, AuthScope.ANY_SCHEME
    null,"Digest"

    Merci !
    WwAvE

Discussions similaires

  1. [HTTPClient] Authentification à mon blog Wordpress
    Par womannosky dans le forum Sécurité
    Réponses: 1
    Dernier message: 29/02/2012, 09h34
  2. Authentification DIGEST et Realm "custom"
    Par le2tbomi dans le forum Glassfish et Payara
    Réponses: 0
    Dernier message: 17/06/2011, 15h38
  3. [HttpClient] Authentification aléatoire
    Par Sebounet54 dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 18/09/2009, 13h52
  4. Squid et authentification "digest" avec LDAP
    Par juju1989 dans le forum Sécurité
    Réponses: 1
    Dernier message: 11/08/2009, 10h25
  5. Authentification DIGEST + JDBC + Mots de passe MD5
    Par hackrobat dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/11/2007, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo