c# - 无法通过使用 EWS 模拟来限制对共享日历的访问
问题描述
我们正在使用 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);
}
解决方案
您可以使用模拟用户来获取“所有者”权限。
请在之前包含以下代码services.Credentials = new WebCredentials("master@exchserver.com", "MasterPwd")
services.PreAuthenticate = true;
您需要根据下面提到的文章确保我们具有 EWS 模拟所需的权限:
在 Exchange 2010 中配置 Exchange 模拟
在 Exchange 2010 中使用 Exchange 模拟
您可以参考以下链接:
推荐阅读
- visual-studio-code - 视觉工作室代码。css.lint.argumentsInColorFunction 配置是否有效?
- python - 当应用于被修补函数调用的函数的参数时,修补没有效果
- excel - 为什么 .SpecialCells().Count 在区域中没有可见行时总是返回 1?
- flutter - 颤振倒带删除的索引
- javascript - 如何在 Cloudant 的 _user 数据库中分配角色
- ios - 缓存一个网页(Typeform),离线时在WKWebView中打开
- python - 为什么我的变量导入会导致代码冲突?
- java - Android 11 错误:应用程序因 java.lang.SecurityException 崩溃:uid xxxxx 无法显式添加类型为:package.name 的帐户
- node.js - 嵌套参考使用猫鼬和 Nodejs 填充
- load-balancing - 负载均衡器的负载均衡