3

是否可以将浏览我的 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 兼容。

4

1 回答 1

0

您应该尝试使用WebCredentials而不是NetworkCredential- 请参阅相关的 SO 帖子AutoDiscoverEWS 和+似乎有问题NetworkCredentials

于 2012-03-05T21:44:58.643 回答