如何在 EWS Android 中使用新式身份验证而不是基本身份验证



我一直在我的安卓应用程序中使用 ews-android-api 来获取日历事件等。根据文档,基本身份验证将在即将到来的 2020 年 10 月弃用。我相信基本身份验证一直在我的 android 应用程序中使用,那么即使在 10 月之后,我如何在我的应用程序中使用现代身份验证而不是基本身份验证才能继续在我的项目中使用 ews-android-api。

期待您的建议和支持。

用于登录我的安卓应用程序的示例代码

private void loginEws(){

ExchangeUser user = new ExchangeUser(mUsername, mPassword, mExchangeServerUrl, mMailboxEmail);
ExchangeHelper helper = new ExchangeHelper(user);
helper.login();

}
public void login() throws Exception {
ExchangeService service = createService();
Mailbox mailbox = new Mailbox(user.getMailbox());
FolderId folderId = new FolderId(WellKnownFolderName.Calendar, mailbox);
CalendarFolder folder = CalendarFolder.bind(service, folderId);
}

private ExchangeService createService() {
try {
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
ExchangeCredentials credentials = new WebCredentials(user.getUsername(), user.getPassword());
service.setUrl(new URI(user.getServerUrl()));
service.setCredentials(credentials);
return service;
} catch (URISyntaxException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

请参阅文档:https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an-ews-application-by-using-oauth

我们已经修复了这个问题:

  1. 获取具有范围的令牌 -https://outlook.office365.com/EWS.AccessAsUser.All
  2. 将令牌添加到标头:
var service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.setUrl(URI.create("https://outlook.office365.com/ews/exchange.asmx"));
service.getHttpHeaders().put("Authorization", "Bearer " + token);

仅此而已,没有任何其他标头,只有有效的令牌和正确的服务配置。

最新更新