Foros del Web » Programación para mayores de 30 ;) » Java »

GetResponsebody o getInputStream con Digest authorization y encriptacion md5-sess

Estas en el tema de GetResponsebody o getInputStream con Digest authorization y encriptacion md5-sess en el foro de Java en Foros del Web. Buenas tardes. ¿Alguien sabe como recoger la respuesta a una petición a un IIS 6.0 que está securizado con Digest y encriptación MD5-sess? Con la ...
  #1 (permalink)  
Antiguo 30/03/2011, 04:37
 
Fecha de Ingreso: marzo-2010
Mensajes: 5
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta GetResponsebody o getInputStream con Digest authorization y encriptacion md5-sess

Buenas tardes.

¿Alguien sabe como recoger la respuesta a una petición a un IIS 6.0 que está securizado con Digest y encriptación MD5-sess?

Con la respuesta me refiero a no solo la cabecera (como este ejemplo: http://www.devdaily.com/java/jwarehouse/commons-httpclient-4.0.3/httpclient/src/test/java/org/apache/http/impl/auth/TestDigestScheme.java.shtml), sino también el cuerpo de la respuesta.

Última edición por notsuku; 30/03/2011 a las 05:26
  #2 (permalink)  
Antiguo 06/04/2011, 07:06
 
Fecha de Ingreso: marzo-2010
Mensajes: 5
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: GetResponsebody o getInputStream con Digest authorization y encriptacion m

He encontrado la solución para la autenticación md5-sess

* Primer paso: Calcular el nonce y el realm con una petición:

HttpClient client = new HttpClient();
GetMethod getMethod = new GetMethod(host+urlStr+parameters);
client.executeMethod(getMethod);
Header wwAuthHeader = getMethod.getResponseHeader("WWW-Authenticate");
for (HeaderElement element : wwAuthHeader.getElements())
{
if(element.getName().equals("nonce"))
nonce = element.getValue();
if(element.getName().equals("realm"))
realm = element.getValue();
}


*Segundo paso: Calcular el response:

String user = "usuario";
String password = "contrasenia";
String cnonce = "inventado";
String nc = "00000001";
String qop = "auth";
String A1 = MD5Encrypt(user+":"+realm+":"+password)+":"+nonce+ ":"+cnonce;
String response = MD5Encrypt(MD5Encrypt(A1)+":"+nonce+":"+nc+":"+cno nce+":"+qop+":"+ MD5Encrypt("GET:"+urlStr));

* La función MD5Encrypt hace lo siguiente:
private String MD5Encrypt(String text)
{
try
{
byte b[] = java.security.MessageDigest.getInstance("MD5").dig est((text).getBytes());
java.math.BigInteger bi = new java.math.BigInteger(1,b);
String s = bi.toString(16);
while(s.length() < 32)
s="0"+s;
return s;
}
catch(Exception e)
{
e.printStackTrace();
}
}


* Tercer paso: Realizar la peticion y salvarla en un xml (por ejemplo):

URL url = new URL(urlStr);
URLConnection urlCon = url.openConnection();
String header = "username=\""+user+"\",realm=\""+realm+"\",nonce=\ ""+nonce+"\",uri=\""+urlStr+"\",cnonce=\""+cnonce+ "\",nc="+nc+",algorithm=MD5-sess,response=\""+response+"\",qop=\""+qop+"\",cha rset=utf-8";
urlCon.setRequestProperty("Authorization", "Digest "+header);

InputStream is = urlCon.getInputStream();
FileOutputStream fos = new FileOutputStream("C:/temp.xml");

byte[] array = new byte[1000];
int step = is.read(array);
while (step > 0)
{
fos.write(array, 0, step);
step = is.read(array);
}
is.close();
fos.close();


* Ahora mi problema es: ¿Cómo puedo evitar el prompt de IE para poder realizar mi código que muestro arriba?

Etiquetas: digest, encriptacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:32.