AD用户身份验证

时间:2012-10-12 03:17:48

标签: asp.net exchangewebservices exchange-server-2010

我正在尝试创建一个ASP.NET(.NET 3.5)网站,通过Exchange Web服务连接到我们的Exchange 2010服务器,当我定义用户名,密码和域进行身份验证时,我能够连接到EWS但是如果可能的话,我想在我的代码中不包含登录详细信息。

在IIS中,我已在网站的web.config中为<authentication mode="Windows"/>启用了网站的集成Windows身份验证。

以下代码是我一直在讨论的内容:

svc.UseDefaultCredentials = True
svc.Credentials = New WebCredentials()
svc.Url = New Uri(svcURL)

使用上面的代码我收到的消息是:

  

当您将请求作为没有邮箱的帐户发出时,您就是   必须为任何可分辨的邮箱主SMTP地址指定   文件夹ID。

当我尝试使用svc.Credentials = CredentialCache.DefaultNetworkCredentials(代替svc.Credentials = New WebCredentials())时,收到错误消息:

  

无法将“System.Net.SystemNetworkCredential”类型的对象强制转换为   键入“Microsoft.Exchange.WebServices.Data.ExchangeCredentials”。

如前所述,唯一有效的方法是通过硬编码用户登录详细信息来定义要通过身份验证的用户凭据,我不想这样做:svc.Credentials = New WebCredentials("username","password","domain")

是否有人能够使用ASP.NET网站中当前登录用户的凭据对EWS进行身份验证?

1 个答案:

答案 0 :(得分:2)

默认情况下,无法将用户的凭据从一个服务器(您承载ASP.NET站点的服务器)委派给另一个服务器(您的Exchange服务器)。这称为“服务器跃点”,Windows默认将其作为安全措施进行阻止。

您可以通过以下几种方法解决此问题:

  1. 使用Kerberos:启用Kerberos后,可以在使用Windows身份验证时在服务器之间委派用户凭据。我不知道如何设置Kerberos的确切细节,因为我只是一个不起眼的开发人员,但也许您的系统管理员可以帮助您。 AFAIK,您需要设置ASP.NET服务器以允许用户委派。
  2. 设置IIS应用程序池的用户标识:如果Kerberos不是一个选项,则可以更改运行ASP.NET站点的应用程序池的标识。首先在IIS管理器中定义新的应用程序池。然后转到该应用程序池的“高级设置”对话框,并将该标识设置为允许访问Exchange服务器的域用户。有关应用程序池标识的更多信息,请访问:http://technet.microsoft.com/en-us/library/cc771170(v=WS.10).aspx
  3. 设置&lt; identity&gt; element:如果由于某种原因无法更改应用程序池,您可以尝试使用&lt; identity&gt;模拟您的ASP.NET网站。 web.config文件中的元素。 ASP.NET为您提供了将凭据存储在注册表中的选项,这样您就不必将它们直接放在web.config文件中。更多信息:http://msdn.microsoft.com/en-us/library/72wdk8cc(v=vs.90).aspx
  4. 使用&lt; appSettings&gt;元素和加密:我能想到的最后一个选项是简单地将凭据放在web.config文件中&lt; appSettings&gt;然后加密整个&lt; appSettings&gt;部分。然后,您只需使用the AppSettingsReader class从代码中读取appSettings。 .NET允许您开箱即用加密web.config文件的各个部分,您可以在没有事件的情况下读取设置,注意到该部分已加密。 .NET会为您解密。更多信息:http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx