How to authenticate EWS Java API
Asked Answered
D

1

8

We are using EWS Java API to use the outlook calendar on our Java application. I am having authentication issues on EWS.

I tried the application on the cloud outlook account that's supplied by rackspace and everything worked just fine so I know the credentials are accurate.

Here is the code:

import java.net.URI;
import java.net.URISyntaxException;
import microsoft.exchange.webservices.data.*;

public class TestClass {

    public static void main(String[] args) {
        TestClass obj = new TestClass();
        obj.testMethod();
    }

    public void testMethod() {
        ExchangeService service = new ExchangeService(
                ExchangeVersion.Exchange2007_SP1);
        ExchangeCredentials credentials = new WebCredentials("username",
                "password");

        service.setCredentials(credentials);

        try {
            service.setUrl(new URI("https://domain/EWS/Exchange.asmx"));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        EmailMessage msg;
        try {
            msg = new EmailMessage(service);
            msg.setSubject("hello world");
            msg.setBody(MessageBody
                    .getMessageBodyFromText("Sent using the EWS API"));
            msg.getToRecipients().add("[email protected]");
            msg.send();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

The url for rackspace is:https://connect.emailsrvr.com/EWS/Exchange.asmx When I put the username and password for this account and it works, I see the console spitting out this one:

Apr 05, 2013 1:40:28 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: NTLM authentication scheme selected

Our client is using ExchangeVersion.Exchange2007_SP1 whereas Rackspace is using ExchangeVersion.Exchange2010 But when I use the credentials(username, password and url) that our client provided, I am getting this error:

Apr 05, 2013 1:49:13 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: Basic authentication scheme selected
Apr 05, 2013 1:49:13 PM org.apache.commons.httpclient.HttpMethodDirector processAuthenticationResponse
SEVERE: Invalid challenge: Basic
org.apache.commons.httpclient.auth.MalformedChallengeException: Invalid challenge: Basic
at org.apache.commons.httpclient.auth.AuthChallengeParser.extractParams(AuthChallengeParser.java:98)
at org.apache.commons.httpclient.auth.RFC2617Scheme.processChallenge(RFC2617Scheme.java:94)
at org.apache.commons.httpclient.auth.BasicScheme.processChallenge(BasicScheme.java:112)
at org.apache.commons.httpclient.auth.AuthChallengeProcessor.processChallenge(AuthChallengeProcessor.java:162)
at org.apache.commons.httpclient.HttpMethodDirector.processWWWAuthChallenge(HttpMethodDirector.java:694)
at org.apache.commons.httpclient.HttpMethodDirector.processAuthenticationResponse(HttpMethodDirector.java:668)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:193)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at microsoft.exchange.webservices.data.HttpClientWebRequest.executeRequest(HttpClientWebRequest.java:358)
at microsoft.exchange.webservices.data.ServiceRequestBase.getEwsHttpWebResponse(ServiceRequestBase.java:930)
at microsoft.exchange.webservices.data.ServiceRequestBase.validateAndEmitRequest(ServiceRequestBase.java:825)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:46)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144)
at microsoft.exchange.webservices.data.ExchangeService.internalCreateItems(ExchangeService.java:464)
at microsoft.exchange.webservices.data.ExchangeService.createItem(ExchangeService.java:535)
at microsoft.exchange.webservices.data.Item.internalCreate(Item.java:215)
at microsoft.exchange.webservices.data.EmailMessage.internalSend(EmailMessage.java:125)
at microsoft.exchange.webservices.data.EmailMessage.send(EmailMessage.java:253)
at com.aurora.trials.TestClass.testMethod(TestClass.java:43)
at com.aurora.trials.TestClass.main(TestClass.java:17)

microsoft.exchange.webservices.data.EWSHttpException: Connection not established
at microsoft.exchange.webservices.data.HttpClientWebRequest.throwIfConnIsNull(HttpClientWebRequest.java:394)
at microsoft.exchange.webservices.data.HttpClientWebRequest.getResponseHeaders(HttpClientWebRequest.java:280)
at microsoft.exchange.webservices.data.ExchangeServiceBase.processHttpResponseHeaders(ExchangeServiceBase.java:1045)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:58)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:144)
at microsoft.exchange.webservices.data.ExchangeService.internalCreateItems(ExchangeService.java:464)
at microsoft.exchange.webservices.data.ExchangeService.createItem(ExchangeService.java:535)
at microsoft.exchange.webservices.data.Item.internalCreate(Item.java:215)
at microsoft.exchange.webservices.data.EmailMessage.internalSend(EmailMessage.java:125)
at microsoft.exchange.webservices.data.EmailMessage.send(EmailMessage.java:253)
at com.aurora.trials.TestClass.testMethod(TestClass.java:43)
at com.aurora.trials.TestClass.main(TestClass.java:17)

I couldn't find any solution for this issue. Please provide any info that you think I can get authenticated for EWS. What is causing these Exceptions?

Dative answered 5/4, 2013 at 19:16 Comment(5)
rockspace EWS seems to be using NTLM for authentication, and the client is using Basic as it can be seen from the console outputs on Eclipse.Dative
And they are not willing to change their authentication from Basic to NTLM for us.Dative
They finally changed the authentication from Basic to NTLM, and it works now. Well, at least I can pull the appointments in the Calendar but I can't create them. I can create the appointments on the cloud account though. I will figure that one out somehow. But at least I ended up learning that the issue was not the code, it was the server side authentication issue.Dative
Did you test with the latest version on github? github.com/OfficeDev/ews-java-apiHaroldson
Is it from the Microsoft team?Dative
A
2

I had your exact same errors and wasted 5 hours trying to fix it. My conclusion is that you should not waste more time on trying to get the EWS codebase to work, the EWS code is confused and you'll have to go in under the hood to fix bugs in that library.

I settled on using javax.mail implementation which does what I need. https://mcmap.net/q/878170/-javamail-ntlm-authentication-failure

Amphibious answered 4/8, 2013 at 14:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.