我正在尝试向现有的ASP.net网站添加一项功能,该网站需要从Exchange Web服务中提取用户日历数据 . 我知道这是可能的,并且本地测试作为概念证明运行,但我在ASP网站的上下文中遇到了一些问题 .
我的目的是通过使用ASP站点凭据的当前用户构建WebCredentials类的实例来覆盖默认凭据,然后使用它来创建Exchange服务绑定 .
Example
ExchangeService service = new ExchangeService(ExchnageVersion.2007);
service.AutoDetect(emailAddress);
service.Credentials = new WebCredentials(credentials);
遗憾的是,WebCredentials对象只能由包含用户名,密码和域的一组字符串构成,或者通过传入ICredentials对象构建 .
那么,问题是,在经过Forms身份验证的网站中,有没有办法为当前经过身份验证的用户获取ICredentials对象?
1 回答
没有表单身份验证使用定制的加密cookie,浏览器会根据每个请求发送该cookie . 它让ASP.NET知道用户已经过身份验证以及他们是谁 . 它不是设计用于外部系统,实际上它要求服务器上的machinekey能够解密细节 . 将表单凭据传递到另一台服务器将毫无意义 .
此系统与Windows身份验证不同,Windows身份验证可以使用各种身份验证方案(如基本,摘要,NTLM和Kerberos身份验证)来协商凭据,作为HTTP协议的一部分,并且可以由同一Exchange上的外部系统理解 .
因此,要使用ICredentials,您需要在ASP.Net应用程序中使用Windows身份验证,或者可以访问用户名/密码,以便可以显式使用NetworkCrententials .