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:
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:
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:
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:
1 2
| <role rolename="envol"/>
<user password="motdepasse" roles="envol" username="envol"/> |
Merci de votre aide !
WwAvE