[EWS身份验证:OAuth的服务帐户凭据

问题描述 投票:0回答:1

[今天,我们有一个将约会同步到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是多少?

非常感谢您的帮助/建议。

oauth exchangewebservices exchange-basicauth
1个回答
0
投票
  1. 是,唯一看起来缺少的是X-MailboxAnchor标头(您也应该使用基本身份验证来进行此操作)
  2. 是,OnPrem不受Office365中所做的更改影响>>
  3. [否,OAuth仅对配置了混合现代身份验证的用户有效,请参阅https://docs.microsoft.com/en-us/office365/enterprise/hybrid-modern-auth-overview(对于Exchange,2013和2016年有某些CU要求)。我也建议您阅读https://practical365.com/exchange-server/configure-hybrid-modern-authentication-for-exchange-server/
  4. Access令牌的TTL为60分钟,如果您的应用程序要长时间使用令牌,则EWS托管API的弱点之一是它没有回调/事件,您可以在其中检查发出服务器请求时令牌过期。因此,您需要在代码逻辑中考虑这一点,方法是在任何服务调用之前添加您自己的验证,或者着眼于修改github源并在基础代码中添加您自己的逻辑。
© www.soinside.com 2019 - 2024. All rights reserved.