Preciso de uma ajuda, não consegui uma forma fácil de autenticar em um servidor REST com autenticação Digest.
Entendo que o método de autenticação Digest é padrão, então deve ter algo pronto que não me faça ter que interpretar os cabeçalhos, fazer o algoritmo de reposta e enviar a chave de confirmação.
-> Send request
<- 401 - Authorization Required
Www-Authenticate: Digest realm=“www.XXXX.com”, qop=“auth”, nonce=“9d27377099ff7ab15a9bd720c3dfaa4b”, opaque=“79d7518d51dea057a55960605d8cc320”
-> Responder ao servidor
Authorization: Digest username=…
<- 201 OK
public int connectToApi(String username, String password, String url, int port) throws Exception
{
this.setUrl(url);
/**
* HTTP client
*/
httpclient = new DefaultHttpClient();
List<String> authpref = new ArrayList<String>();
authpref.add(AuthPolicy.DIGEST);
httpclient.getParams().setParameter(AuthPNames.CREDENTIAL_CHARSET, authpref);
AuthScope scope = new AuthScope(url,port, AuthScope.ANY_REALM);
Credentials credentials = new UsernamePasswordCredentials(username, password);
httpclient.getCredentialsProvider().setCredentials(scope , credentials);
httpclient.addRequestInterceptor(new HttpRequestInterceptor() {
@Override
public void process(
HttpRequest request, HttpContext context)
throws HttpException, IOException {
request.setHeader(HTTP.USER_AGENT, USER_AGENT);
}
});
httpclient.addResponseInterceptor(new HttpResponseInterceptor() {
@Override
public void process(HttpResponse response, HttpContext context)
throws HttpException, IOException {
setResponseSession(response.getFirstHeader(SESSIONKEY));
}
});
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
this.setResponsecode(response.getStatusLine().getStatusCode());
return this.getResponsecode();
}