AD用户身份验证

Lim*_*ima 7 asp.net exchangewebservices exchange-server-2010

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

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

以下代码是我一直在使用的代码:

svc.UseDefaultCredentials = True
svc.Credentials = New WebCredentials()
svc.Url = New Uri(svcURL)
Run Code Online (Sandbox Code Playgroud)

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

将请求作为没有邮箱的帐户发出时,必须为任何可识别的文件夹ID指定邮箱主SMTP地址.

当我尝试使用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进行身份验证?

Jak*_*sen 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. 设置 <identity> 元素:如果由于某种原因无法更改应用程序池,您可以尝试使用 web.config 文件中的 <identity> 元素来模拟 ASP.NET 网站。ASP.NET 为您提供了将凭据存储在注册表中的选项,这样您就不必将它们直接放入 web.config 文件中。更多信息请参见:http://msdn.microsoft.com/en-us/library/72wdk8cc (v=vs.90).aspx
  4. 使用 <appSettings> 元素和加密:我能想到的最后一个选项是简单地将凭据像普通 <appSettings> 一样放入 web.config 文件中,然后加密整个 <appSettings> 部分。然后,您只需使用AppSettingsReader 类从代码中读取 appSettings 即可。.NET 允许您开箱即用地加密 web.config 文件的各个部分,并且您可以读取设置,而不会注意到该部分已加密。.NET 会为您负责解密。更多信息请访问:http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx