是否可以将浏览我的 ASP.NET Web 应用程序的用户的凭据传递给 EWS FindAppointments
调用?
我只是尝试返回事件浏览用户的日历详细信息,他们无疑有权读取自己的日历,因此该问题不应与使用 EWS api discussed here 的 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
变量是通过基于System.Security.Principal.WindowsIdentity.GetCurrent().Name
的 AD 查找设置的
编辑(2012 年 8 月 14 日)
为了实现我上面想要做的事情,我相信 HostingEnvironment.Impersonate
不是必需的。
相反,我需要使用 ExchangeService
的 ImpersonatedUserId
属性。
更多详细信息here
唯一的问题是我们运行的是 Exchange 2007 和 power shell command用于启用服务帐户来模拟所有用户(您将使用传递到 .Credentials
参数)似乎仅与 Exchange 2010 兼容。
最佳答案
您应该尝试使用 WebCredentials
而不是NetworkCredential
- 参见related SO post 。 EWS 和 AutoDiscover
+ NetworkCredentials
关于asp.net - 如何将 HostingEnvironment.Impersonate 凭据传递给 ExchangeService EWS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9567544/