我正在尝试创建一个 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)
使用上面的代码我收到消息:
当以没有邮箱的帐户身份提出请求时,您
必须为任何杰出的邮箱指定邮箱主 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 进行身份验证?
默认情况下,无法将用户的凭据从一台服务器(托管 ASP.NET 站点的服务器)委托给另一台服务器(您的 Exchange 服务器)。这称为“服务器跃点”,Windows 默认情况下将阻止它作为安全措施。
您有几个选项可以解决此问题:
-
使用 Kerberos:启用 Kerberos 后,可以在使用 Windows 身份验证时在服务器之间委派用户凭据。我不知道如何设置 Kerberos 的确切细节,因为我只是一个谦虚的开发人员,但也许您的系统管理员可以帮助您。 AFAIK,您需要设置 ASP.NET 服务器以允许用户委派。
-
设置 IIS 应用程序池的用户身份:如果 Kerberos 不是一个选项,您可以更改 ASP.NET 站点运行所在的应用程序池的标识。首先在IIS管理器中定义一个新的应用程序池。然后转到该应用程序池的“高级设置”对话框,并将身份设置为允许访问 Exchange 服务器的域用户。有关应用程序池标识的更多信息,请参见此处:http://technet.microsoft.com/en-us/library/cc771170(v=WS.10).aspx http://technet.microsoft.com/en-us/library/cc771170(v=WS.10).aspx.
-
设置 元素:如果由于某种原因无法更改应用程序池,您可以尝试使用 web.config 文件中的 元素来模拟 ASP.NET 网站。 ASP.NET 为您提供了将凭据存储在注册表中的选项,这样您就不必将它们直接放入 web.config 文件中。更多信息请点击这里:http://msdn.microsoft.com/en-us/library/72wdk8cc(v=vs.90).aspx http://msdn.microsoft.com/en-us/library/72wdk8cc(v=vs.90).aspx
-
使用 元素和加密:我能想到的最后一个选项是简单地将凭据作为正常的 放入 web.config 文件中,然后加密整个 部分。然后,您只需使用以下命令从代码中读取 appSettingsAppSettingsReader 类 http://msdn.microsoft.com/en-us/library/system.configuration.appsettingsreader.aspx。 .NET 允许您开箱即用地加密 web.config 文件的各个部分,并且您可以读取设置,而不会注意到该部分已加密。 .NET 会为您负责解密。更多信息请点击这里:http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)