7

我正在尝试创建一个 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)

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

当以没有邮箱的帐户发出请求时,您必须为任何可分辨文件夹 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 进行身份验证?

4

1 回答 1

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. Using the <appSettings> ellement and encryption: The last option I can think of is to simply put the credentials in your web.config file as normal <appSettings> and then encrypt the entire <appSettings> section. You would then simply read the appSettings from your code using the AppSettingsReader class. .NET allows you to encrypt sections of the web.config file out of the box and you can read the settings without event noticing that the section is encrypted. .NET takes care of decrypting for you. More info here: http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx
于 2013-05-19T15:30:01.850 回答