【问题标题】:Obtaining an ICredentials object for the authenticated user of an ASP website为经过身份验证的 ASP 网站用户获取 ICredentials 对象
【发布时间】:2011-09-10 16:52:38
【问题描述】:

我正在尝试向现有 ASP.net 网站添加一项功能,该网站需要从 Exchange Web 服务中提取用户日历数据。我知道这是可能的,并且运行本地测试作为概念验证,但是在 ASP 网站的上下文中实现它时遇到了一些问题。

我的意图是通过使用 ASP 站点凭据的当前用户构造 WebCredentials 类的实例来覆盖默认凭据,然后使用它来创建 Exchange 服务绑定。

示例

ExchangeService service = new ExchangeService(ExchnageVersion.2007);
service.AutoDetect(emailAddress);
service.Credentials = new WebCredentials(credentials);

不幸的是,WebCredentials 对象只能由一组包含用户名、密码和域的字符串构造,或者通过传入一个 ICredentials 对象来构造。

那么,问题是,在经过 Forms 身份验证的网站中,有没有办法为当前经过身份验证的用户获取 ICredentials 对象?

【问题讨论】:

    标签: asp.net exchangewebservices


    【解决方案1】:

    没有表单身份验证使用由浏览器随每个请求发送的定制加密 cookie。它让 ASP.NET 知道用户已通过身份验证以及他们是谁。它不是为与外部系统一起工作而设计的,实际上它需要服务器上的机器密钥才能解密详细信息。将表单凭据传递给另一台服务器将毫无意义。

    此系统与 Windows 身份验证不同,后者可以使用各种身份验证方案(例如基本、摘要、NTLM 和 Kerberos 身份验证)来协商凭据作为 HTTP 协议的一部分,并且可以被同一 Exchange 上的外部系统理解。

    因此,要使用 ICredentials,您要么需要在 ASP.Net 应用程序中使用 Windows 身份验证,要么有权访问用户名/密码,以便显式使用 NetworkCrententials。

    【讨论】:

    • 谢谢你,两个月的沉默,以及有效证实我自己调查的答案,为我关闭了这个。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2021-04-07
    • 2016-09-13
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多