AD用户身份验证

问题描述:

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

在IIS中,我已启用集成Windows身份验证的网站,在web.config的网站我有<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")

任何人都已经能够验证到EWS在ASP.NET网站中使用当前登录用户的凭据?

+0

利马,你能找出这种情况下的解决方案? –

默认情况下,不能将用户的凭据从一台服务器(您承载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. 设置<身份>元素:如果你因为某些原因无法更改应用程序池,您可以使用<身份>元素在你的web.config文件试试你的ASP.NET网站的模拟。 ASP。NET提供了将证书存储在注册表中的选项,以便您不必将它们直接放入web.config文件中。这里更多的信息:http://msdn.microsoft.com/en-us/library/72wdk8cc(v=vs.90).aspx
  4. 使用<的appSettings> ellement和加密:我能想到的是简单地把凭据web.config文件中正常<的appSettings>,然后加密整个<的appSettings的最后一个选项>部分。然后,您只需使用the AppSettingsReader class从代码中读取appSettings。 .NET允许你加密web.config文件的部分开箱即用,并且你可以在没有事件注意到该部分被加密的情况下阅读这些设置。 .NET负责为你解密。更多的信息在这里:http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx