是否可以将浏览我的 asp.net Web 应用程序的用户的凭据传递给 EWSFindAppointments
调用?
我只是试图返回活动浏览用户的日历详细信息,他们无疑将有权阅读自己的日历,因此该问题不应与此处讨论的 EWS api 的 Exchange 模拟有关。
下面的代码在运行 localhost 时运行良好,但从 Web 服务器运行,尽管配置了 Windows 身份验证和身份模拟,但它会引发访问被拒绝错误。
using (HostingEnvironment.Impersonate())
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.UseDefaultCredentials = true;
service.AutodiscoverUrl(UserEmailAddress);
Mailbox mb = new Mailbox(UserEmailAddress);
FolderId cfCalendarFolderID = new FolderId(WellKnownFolderName.Calendar, mb);
CalendarView cvCalendarView = new CalendarView(DateTime.Now, DateTime.Now.AddDays(30), 1000);
cvCalendarView.MaxItemsReturned = 3;
也许我错过了一种将HostingEnvironment
凭据传递给我的ExchangeService
对象的简单方法?
有没有办法检查是什么service.UseDefaultCredentials
?
我无法使用以下内容,因为无法从经过 Windows 身份验证的模拟用户那里获取密码。
service.Credentials = new System.Net.NetworkCredential(username, password, domain);
我也尝试了以下方法,但得到相同的 ServiceResponseException 访问被拒绝错误。
service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
service.PreAuthenticate = true;
在此先感谢您的帮助。
可能相关或不相关的附加信息:
- 该网站的应用程序池标识是
NetworkService
. - 该
UserEmailAddress
变量是根据 AD 查找设置的System.Security.Principal.WindowsIdentity.GetCurrent().Name
编辑(2012 年 8 月 14 日)为了实现我想要在上面做的事情,我相信HostingEnvironment.Impersonate
不需要。相反,我需要使用ExchangeService
'ImpersonatedUserId
属性。关于这里的更多详细信息
唯一的问题是我们正在运行 Exchange 2007,并且用于启用服务帐户以模拟所有用户的power shell 命令(您将使用传入.Credentials
参数)似乎仅与 Exchange 2010 兼容。