使用服务帐户 read/update 个 O365 用户的日历

Use a service account to read/update calendars of O365 users

我想使用服务帐户读取和更新 O365 用户的日历。我想要访问的所有用户都与我的帐户共享了他们的日历。

我有一个应用程序,它使用 AAD v2.0 MSAL 进行身份验证。问题是我想将我的凭据用于 update/read 这些用户的日历,但我不想使用此帐户登录,我希望在调用我的 API端点。

使用 Exchange 网络服务从存储的用户发送电子邮件的示例:

public Office365MailSender()
        {
            _credentials = new NetworkCredential(
                ConfigurationManager.AppSettings["ida:0365MailAddress"],
                ConfigurationManager.AppSettings["ida:0365MailPassword"]);
        }

        public void Send(EmailDto email)
        {
            var service = new ExchangeService
            {
                Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"),
                Credentials = new OAuthCredentials(_credentials)
            };

            var message = new EmailMessage(service);

            message.ToRecipients.Add(email.To);
            message.Subject = email.Subject;
            message.Body = email.Body;
            message.Body.BodyType = BodyType.HTML;

            message.SendAndSaveCopy();
        }

现在我想使用 MSAL 为 read/update 用户日历做同样的事情。 这可以做到吗?如果没有,是否有其他方法可以做到这一点,比如使用证书?

例如在 ADAL 中,我们有这些:

public AuthenticationResult AcquireToken(string resource, string clientId, UserCredential userCredential);
public Task<AuthenticationResult> AcquireTokenAsync(string resource, string clientId, UserCredential userCredential);

Microsoft 身份验证库 (MSAL) 目前不支持资源所有者密码凭据流程。您可以通过 UserCredential 查看 class 不提供密码 属性。

并且根据测试,注册Azure AD V2.0端点的应用程序也不支持此流程。如果使用流程获取访问令牌,我们将得到如下异常:

如果您希望 Azure AD V2.0 终结点支持此流程,您可以提交来自 here. And if you have any idea about the Microsoft authentication library, you can discuss from here 的反馈。