0

今天我们有一个将约会同步到 Exchange 的应用程序。我们有几个客户使用不同版本的 Exchange,即:Exchange 2010、o365。每个客户都创建了一个具有我们用于身份验证的模拟权限的服务帐户。一个例子:

var credentials = new WebCredentials(serviceAccount.username, serviceAccount.password);
var service = new ExchangeService
{
   Credentials = credentials,
   Url = new Uri(exchangeUri)
}
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, email);

因此,从 2020 年 10 月 13 日起,此方法将不再有效,我们将不得不改用 OAuth。我已阅读 MS 文档“使用 OAuth 验证 EWS 应用程序”: https ://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-authenticate-an- ews-application-by-using-oauth

我已经在 Azure AD 中注册了我的应用程序,并获得了一个应用程序 ID。我想我应该使用“应用程序权限”,并使用以下代码来获取令牌:

// Configure the MSAL client to get tokens
var app = ConfidentialClientApplicationBuilder
    .Create(ConfigurationManager.AppSettings["appId"])
    .WithAuthority(AzureCloudInstance.AzurePublic, ConfigurationManager.AppSettings["tenantId"])
    .WithClientSecret(ConfigurationManager.AppSettings["clientSecret"]).Build();

// The permission scope required for EWS access
var ewsScopes = new string[] { "https://outlook.office.com/.default" };

//Make the toekn request
AuthenticationResult authResult = await app.AcquireTokenForClient(ewsScopes).ExecuteAsync();

我的问题:

  1. 这对我来说是“正确”的方法,还是我错过了什么?
  2. 当前身份验证是否仍适用于本地服务器(2020 年 10 月 13 日之后)?
  3. OAuth 身份验证是否适用于 Exchange 2010?
  4. 如果是这样,我们的客户如何获得 tentantId(我知道在哪里可以找到 o365)。
  5. 令牌的 TTL 是什么?

非常感谢任何帮助/建议。

4

2 回答 2

1
  1. 是的,唯一看起来缺少的是 X-MailboxAnchor 标头(您也应该使用 Basic Auth 来执行此操作)
  2. 是 OnPrem 不受 Office365 中所做更改的影响
  3. 不,OAuth 仅适用于已配置混合现代身份验证的 OnPrem,请参阅https://docs.microsoft.com/en-us/office365/enterprise/hybrid-modern-auth-overview(对于 Exchange,有某些 CU 要求2013 年和 2016 年)。我还建议您阅读https://practical365.com/exchange-server/configure-hybrid-modern-authentication-for-exchange-server/
  4. 访问令牌的 TTL 为 60 分钟,如果您的应用程序要长时间使用令牌,EWS 托管 API 的弱点之一是它没有可以检查令牌的回调/事件当它发出服务器请求时过期。因此,您需要在代码逻辑中考虑这一点,或者在任何服务调用之前添加您自己的验证,或者查看修改 github 源代码并在底层代码中添加您自己的逻辑。
于 2020-03-22T23:33:32.880 回答
0

对于您的第 4 个问题:您可以配置 azure 访问令牌生命周期并将其最多延长至 24 小时。 关联

于 2020-04-08T12:09:25.027 回答