【问题标题】:Can't limit access to shared calendar through impersonation using EWS无法通过使用 EWS 模拟来限制对共享日历的访问
【发布时间】:2019-02-28 09:00:36
【问题描述】:

我们正在使用 EWS 将我们的 CRM 与 Exchange Online 2010SP2 集成。任务之一:为销售人员提供一个日历,规则如下:每个销售人员都可以看到调度程序中的所有约会,但只能打开并查看他/她自己的约会的详细信息(正文)。 CRM 正在安排预约以响应某些业务事件。我们尝试使用 impersonate 和 Sensitivity.Private 属性。使用模拟用户名放置约会,但该用户无法通过 OWA 或 Outlook 打开约会。所以它被放置为“主”用户的私人约会(创建共享日历的用户,他的凭据用于服务连接),他可以在 Outlook 或 OWA 中打开它。 EWSEditor 显示约会的 LastModifiedUser - 正确的模拟用户名(不是主人的)。在 Fiddler 中,我们可以看到约会放置请求的“成功”响应(在模拟用户下)。在 OutlookSpy 中,我们可以看到约会 PR_SENDER_NAME_W、PR_SENT_REPRESENTING_NAME_W 属性显示“主人”的用户名。我们卡住了。

模拟用户对该共享日历拥有“所有者”权限。

如果模拟不能解决这个问题,委托技术可以解决这个问题吗?

提前感谢您的帮助。

static void Main(string[] args)
{
    ExchangeService services = new 
    ExchangeService(ExchangeVersion.Exchange2010_SP2);

    services.Credentials = new WebCredentials("master@exchserver.com", 
        "MasterPwd");
    services.Url = new Uri("https://someserver.com/ews/exchange.asmx");

    FolderId rfRootFolderid = new FolderId(WellKnownFolderName.Calendar);
    FolderView fvFolderView = new FolderView(100);

    DateTime startDate = DateTime.Now.AddDays(1);
    DateTime endDate;

    string SalesCalendarId = "AAMkADVlMGVjZWVkLT....AADo8XAAA=";

    CalendarFolder folder = CalendarFolder.Bind(services, new 
    FolderId(SalesCalendarId));

    TimeSpan ts = new TimeSpan(10, 00, 0);
    startDate = startDate.Date + ts;
    endDate = startDate.AddMinutes(60);

    services.HttpHeaders.Add("X-AnchorMailbox","impersonateduser@exchserver.com");

    appointment.Subject = "from Test";
    appointment.Body = "Test";
    appointment.Start = startDate;
    appointment.End = appointment.Start.AddMinutes(30);
    appointment.ReminderDueBy = appointment.Start.AddHours(1);
    appointment.Sensitivity = Sensitivity.Private;
    ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "impersonateduser@exchserver.com");

    appointment.Save(SalesCalendarId, SendInvitationsMode.SendToNone);
}

【问题讨论】:

    标签: c# exchangewebservices


    【解决方案1】:

    您可以使用模拟用户来获取“所有者”权限。

    请在services.Credentials = new WebCredentials("master@exchserver.com", "MasterPwd")之前加上下面的代码

    services.PreAuthenticate = true;
    

    您需要根据下面提到的文章确保我们具有 EWS 模拟所需的权限:

    Configuring Exchange Impersonation in Exchange 2010

    Using Exchange Impersonation in Exchange 2010

    您可以参考以下链接:

    Get all calendar events for a specific user

    【讨论】:

    • 这没有帮助。不管怎样,谢谢你的回复,阿丽娜。而且我已经尝试过委托技术。那都不管用。也许没有办法提供这种逻辑:尝试在约会级别区分共享日历的用户权限。每个人都可以观察所有的约会,但只能看到自己约会的细节。有人可以回答这个问题吗?可能是 Glen Scales?
    • 您可以参考此链接:docs.microsoft.com/en-us/exchange/client-developer/…。保存项目时,Save 方法调用必须标识邮箱所有者的日历文件夹。
    • 谢谢阿丽娜。我以前试过,我又做了一次。那没有帮助。我能达到的最大 - 是看到最后修改的名称是 impersonateduser@exchserver.com,但组织者(和 .Private 财产也在他的名下)是 master@exchserver.com。每当您使用任何技术处理电子邮件发送时:模拟或委托,都可以正常工作,但我无法实现通过具有私有财产的模拟用户进行约会的目标。
    • 你可以参考这个链接(文章的答案):stackoverflow.com/questions/30594319/….
    猜你喜欢
    • 2018-07-24
    • 2011-05-12
    • 1970-01-01
    • 2014-07-09
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多