Chúng tôi đang sử dụng API Java EWS để sử dụng lịch xem trên ứng dụng Java của chúng tôi. Tôi đang gặp sự cố xác thực trên EWS.Cách xác thực EWS Java API
Tôi đã thử ứng dụng trên tài khoản triển vọng đám mây được cung cấp bởi rackspace và mọi thứ hoạt động tốt để tôi biết thông tin đăng nhập là chính xác.
Đây là mã:
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();
}
}
}
Url cho Rackspace là: https://connect.emailsrvr.com/EWS/Exchange.asmx
Khi tôi đặt tên người dùng và mật khẩu cho tài khoản này và nó hoạt động, tôi thấy giao diện điều khiển khạc nhổ ra cái này:
Apr 05, 2013 1:40:28 PM org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme
INFO: NTLM authentication scheme selected
Khách hàng của chúng tôi đang sử dụng ExchangeVersion.Exchange2007_SP1 trong khi Rackspace đang sử dụng ExchangeVersion.Exchange2010 Nhưng khi tôi sử dụng thông tin xác thực (tên người dùng, mật khẩu và url) mà khách hàng của chúng tôi cung cấp, tôi gặp lỗi này:
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)
Tôi không thể tìm thấy giải pháp nào cho vấn đề này. Vui lòng cung cấp bất kỳ thông tin nào mà bạn cho rằng tôi có thể được xác thực cho EWS. Điều gì gây ra những ngoại lệ này?
không gian đá EWS dường như đang sử dụng NTLM để xác thực và máy khách đang sử dụng Cơ bản vì nó có thể được nhìn thấy từ các kết quả đầu ra của bàn điều khiển trên Eclipse. – leventend
Và họ không sẵn sàng thay đổi xác thực của họ từ Cơ bản sang NTLM cho chúng tôi. – leventend
Cuối cùng họ đã thay đổi xác thực từ Basic thành NTLM, và nó hoạt động ngay bây giờ. Vâng, ít nhất tôi có thể kéo các cuộc hẹn trong Lịch nhưng tôi không thể tạo ra chúng. Tôi có thể tạo các cuộc hẹn trên tài khoản đám mây. Tôi sẽ tìm ra cái đó bằng cách nào đó. Nhưng ít nhất tôi đã học được rằng vấn đề không phải là mã, đó là vấn đề xác thực phía máy chủ. – leventend