Milind - I am yet to try the option suggested by Oleg. However, got it
working with the code given in the link -
http://www.muneebahmad.com/index.php/archives/127
Regards,
Srivatsan
mkjee wrote:
>
>
> 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: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>>
>>
>>
>
>
--
View this message in context:
http://old.nabble.com/Issues-accessing-NTLM-server-using-HTTPClient-4.1-tp31417743p32855631.html
Sent from the HttpClient-User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]