0

对于要在本地网络上使用的应用程序,我有以下设置:

Silverlight Client App -> Web Server (data objects etc) | -> Exchange
                                                        | -> SQL Database

其他一切正常,我可以从数据库等中获取数据(可能值得注意的是,我正在使用 SQL 身份验证而不是 Windows 身份验证),但是当我尝试使用 Exchange Web 服务从交换中获取当前用户的日历条目时它给了我一个401 unauthorised错误。

这一切都在我的本地开发服务器(在我的机器上)上运行,该服务器使用默认的 ApplicationPoolIdentity 在经典的 ASP.NET 4 应用程序池下运行。我不是通过 SSL 进入的,只是通过端口 81

我可以连接以获取自己的日历条目,但对于其他用户,我收到错误

如果我在没有模拟代码的情况下尝试它,我会收到一个Connection did not succeed. Please try again later错误,因为我假设 EWS 将使用没有域登录的 ApplicationPoolIdentity。

我使用以下代码来模拟(暂时忽略任何可能未处理的异常/安全漏洞,我只想让它工作!):

var impersonationContext = ((System.Security.Principal.WindowsIdentity)System.Threading.Thread.CurrentPrincipal.Identity).Impersonate();

// Use default credentials
service.UseDefaultCredentials = true;

// Get the target folder ID using the email address
var folder = new FolderId(WellKnownFolderName.Calendar, new Mailbox(emailAddress));

// Get the appointments
var response = service.FindAppointments(folder, view);

impersonationContext.Undo();


// Return list of appointment entities
return response.Items;

查看显示,在调用该方法System.Security.Principal.GetCurrent()后,用户更改为我要模拟的用户的身份。ImpersonateAuthenticationType isKerberosImpersonationLevelis Impersonate。据我所知,这应该可以工作,但看起来我的网络服务器不想通过交换成功进行身份验证。

我是否在设置中遗漏了某些东西或作为交换?

4

1 回答 1

-2

This ended up working in the end - it ended up being some exchange settings and using the current threads principal instead of the system principal

于 2013-08-22T10:46:28.597 回答