【问题标题】:What permission is required to get the WorkHours of a calendar?获取日历的 WorkHours 需要什么权限?
【发布时间】:2018-08-14 04:30:28
【问题描述】:

背景

我正在尝试连接到 Office 365,以读取已授予权限的用户的日历。我尝试了两种选择:

  • Exchange Web 服务 (EWS)
  • 微软图形

EWS 可以工作,但缺点是我使用登录名/密码组合进行连接。即使我将它们加密存储,我也宁愿根本不存储它们。

Microsoft Graph 也能正常工作,但有一个巨大的缺点;我使用 API 对项目所做的任何更新都会发送给所有与会者。使用 EWS API 时可以关闭此行为,但对于 Graph 不能(还?)。

我想采用我对 Microsoft Graph 的 OAuth 实施,并使用 EWS 服务进行连接。除非用户需要,否则不会对与会者进行更新,也不会存储凭据。

问题

为了让我的应用程序正常工作,我需要这样做;

  • 获取日历的时区,我通过读取此人的工作时间来做到这一点;
  • 读取和写入日历项目,这是应用程序的目的。

我已经使用 OAuth 与 Office365 建立了 OAuth 连接。

我无法确定我需要的最小权限子集。我还没有找到任何关于此的文档。我尝试过的任何权利子集,当我要求 WorkHours 时都会收到 401。

最小代码示例

当我启用 Exchange Online 的应用注册支持的 38 个非管理员权限时,这将起作用,但对于我尝试过的每个子集都将失败。

[TestMethod]
public void ConnectUsingEws()
{
    var accessToken = "eyJz93a...k4laUWw";
    var credentials = new OAuthCredentials(accessToken);
    var service = new ExchangeService(TimeZoneInfo.Utc);

    service.Url = new Uri("https://outlook.office365.com/EWS/exchange.asmx");
    service.TraceEnabled = true;
    service.TraceFlags = TraceFlags.All;
    service.Credentials = credentials;

    // This next line is where the service will always throw a 401.
    var workHours = UserConfiguration.Bind(service, "WorkHours",
        WellKnownFolderName.Calendar, UserConfigurationProperties.All);

    // Do some XML magic on workHours to get the timezone.
}

TLDR

我确定这是一项需要启用的权限,而且我也相当确定这不是一项非常明显的权限。

【问题讨论】:

    标签: c# exchangewebservices microsoft-graph-api


    【解决方案1】:

    EWS 不支持与 REST 对 Oauth 所做的相同级别的权限范围(从安全角度来看,这是使用 EWS 的一大缺点)。

    EWS 的 OAuth 身份验证仅在 Exchange 中作为 Office 365。EWS 应用程序需要“完全访问用户的 邮箱”权限。

    参考https://msdn.microsoft.com/en-us/library/office/dn903761(v=exchg.150).aspx

    【讨论】:

    • 感谢您如此迅速地回答!然而,似乎没有这样一种许可;这可能已被扩展或拆分为多个权限?我将编辑包含我有权访问的权限的问题。
    • 只是描述发生了变化“以登录用户身份通过​​ Exchange Web 服务访问邮箱”仍然是 full_access_as_user。关键是登录的用户仍然需要被授予对使用正常机制访问的邮箱的完全访问权限,例如 Add-MailboxPermission 等(例如,您应该能够使用正常的基本身份验证访问同一个邮箱)。如果这仍然不起作用,我会检查您获得令牌的授权,也许可以尝试jwt.io
    • 这对我来说很有意义。我现在刚刚启用了“通过 Exchange Web 服务以登录用户身份访问邮箱”和“读取和写入用户日历”;第一次测试似乎是阳性的。感谢您清理一切!
    • 我们刚刚确实得到了确认;这完全有效,谢谢!将答案标记为已接受!
    猜你喜欢
    • 2011-02-10
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多