hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mkjee <kadam.mil...@gmail.com>
Subject Re: Issues accessing NTLM server using HTTPClient 4.1
Date Tue, 15 Nov 2011 16:02:55 GMT


Hi Srivatsan,

I have a similar issue where URL works fine via browser but fails from JAVA
client when web server is IIS with NTLM authentication. Did you find any
solution for this problem?

Thanks in advance,
Milind




Srivatsan wrote:
> 
> Have a similar issue. With the code below - authentication is unsuccessful
> when using the credentials of a local user. By local user, the domain name
> / realm is the host itself. However, authentication is successful with the
> same credentials when accessed from browser.
> 
>                 DefaultHttpClient httpclient = new DefaultHttpClient();
> 		List<String> authpref = new ArrayList<String>(); 
> 		authpref.add(AuthPolicy.NTLM);
> 		httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
> authpref); 
> 		NTCredentials creds = new NTCredentials("uid", "pwd", "ip", "domain");
> 		httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY,
> creds);
> 		HttpHost target = new HttpHost(<IP>, 80, "http");
> 		// Make sure the same context is used to execute logically related
> requests
> 		HttpContext localContext = new BasicHttpContext();
> 		// Execute a cheap method first. This will trigger NTLM authentication
> 		HttpGet httpget = new HttpGet(<URL>);
> 		HttpResponse response;
> 		try {
> 			response = httpclient.execute(target, httpget, localContext);
> 			System.out.println("Status Code:" +
> response1.getStatusLine().getStatusCode());
> 			BufferedReader isr = new BufferedReader (new
> InputStreamReader(response.getEntity().getContent()));
> 			while (isr.readLine() != null) {
> 				System.out.println("Content is: ********" + isr.readLine());
> 			}
> 			HttpEntity entity = response1.getEntity();
> 			EntityUtils.consume(entity);			
> 		} catch (ClientProtocolException e) {
> 			// TODO Auto-generated catch block
> 			e.printStackTrace();
> 		} catch (IOException e) {
> 			// TODO Auto-generated catch block
> 			e.printStackTrace();
> 		}
> 
> Added the HTTP wire log.
> http://old.nabble.com/file/p32819071/localuser-nabble.txt
> localuser-nabble.txt 
> 
> Any pointers, please?
> 
> Thanks,
> Srivatsan
> 
> 
> olegk wrote:
>> 
>> On Sun, 2011-04-17 at 20:03 +0530, Dilshan Edirisuriya wrote:
>>> Hi ,
>>> 
>>> I have a web page that need to access with NTLM authentication on my
>>> local
>>> machine and i can see the expected behavior with Web browsers. But when
>>> I
>>> try to access same page using HTTPClient 4.1 I'm getting following
>>> exception.
>>> 
>>> 
>>> Apr 17, 2011 7:18:23 PM
>>> org.apache.http.client.protocol.RequestTargetAuthentication process
>>> SEVERE: Authentication error: Invalid name provided (Mechanism level:
>>> Could
>>> not load configuration file C:\Windows\krb5.ini (The system cannot find
>>> the
>>> file specified))
>>> Status :: HTTP/1.1 401 Unauthorized
>>> 
>>> 
>> 
>> Dilshan
>> 
>> HttpClient chooses SPNEGO/kerberos auth scheme over NTLM per default in
>> case the server supports both, as SPNEGO/kerberos is considered somewhat
>> more secure than NTLM. 
>> 
>> You can alter the order of preferred auth schemes by using
>> 'http.auth.target-scheme-pref' or 'http.auth.proxy-scheme-pref'
>> parameters:
>> 
>> http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html#d4e869
>> 
>> Just a general remark: when troubleshooting problems with HttpClient a
>> wire / context log of the HTTP session exhibiting the problem helps a
>> great deal.
>> 
>> Oleg
>> 
>> 
>>> This is my sample code and it exactly same as example given in here
>>> http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html#ntlm
>>> 
>>>   DefaultHttpClient httpclient = new DefaultHttpClient();
>>> 
>>>   NTCredentials creds = new NTCredentials("user", "pwd", "machin-name",
>>> "machin-name");
>>>   httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY,
>>> creds);
>>> 
>>>   Host target = new HttpHost("localhost", 9090, "http");
>>>   HttpContext localContext = new BasicHttpContext();
>>> 
>>> // Execute a cheap method first. This will trigger NTLM authentication
>>>    HttpGet httpget = new HttpGet("/hello1");
>>>    HttpResponse response = httpclient.execute(target, httpget,
>>> localContext);
>>>    HttpEntity entity = response.getEntity();
>>>    System.out.println(" Status :: "+ response.getStatusLine());
>>> 
>>> 
>>> Further analyzing  i found   there is no 'Authorization:" header in
>>> outgoing
>>> messages where this header is available with browser access. Please note
>>> that I used same name/password/Domain for browser access too.
>>> 
>>> Appreciate for any help to resolve this ?
>>> 
>>> Thank you ,
>>> 
>>> Dilshan
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://old.nabble.com/Issues-accessing-NTLM-server-using-HTTPClient-4.1-tp31417743p32848475.html
Sent from the HttpClient-User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message