今天我们有一个将约会同步到 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();
我的问题:
- 这对我来说是“正确”的方法,还是我错过了什么?
- 当前身份验证是否仍适用于本地服务器(2020 年 10 月 13 日之后)?
- OAuth 身份验证是否适用于 Exchange 2010?
- 如果是这样,我们的客户如何获得 tentantId(我知道在哪里可以找到 o365)。
- 令牌的 TTL 是什么?
非常感谢任何帮助/建议。