asp.net - 如何将 HostingEnvironment.Impersonate 凭据传递给 ExchangeService EWS?

标签 asp.net outlook exchange-server ews-managed-api

是否可以将浏览我的 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 不是必需的。 相反,我需要使用 ExchangeServiceImpersonatedUserId 属性。 更多详细信息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/

相关文章:

asp.net - 从 C# 类访问 ASP.NET 页面的 TextBox 值

c# - WCF - (504) 服务器未返回对此请求的响应

powershell - 在 'user' 上找不到对象 'Domain Controller'

exchange-server - 如何使用 EWS 确定包含给定项目或文件夹的邮箱?

c# - 如何使用这种格式验证美国货币 $123.45

c# - 如何使用表而不是 gridview?

css - 删除 Gmail 上链接的蓝色下划线

vba - MS Access/Outlook 2010 - 如何选择从哪个帐户发送电子邮件?

Python win32com 获取电子邮件的大小

python - 需要等效的函数来获取 Exchangelib Python 中的 Alias,就像 win32com 中的这个函数 (item.sender.getexchange().Alias)