【问题标题】:Pass-through NTLM authentication in a web app on an IMAP mail server在 IMAP 邮件服务器上的 Web 应用程序中传递 NTLM 身份验证
【发布时间】:2012-07-25 14:38:21
【问题描述】:

我需要在我的 Web 应用程序中针对 IMAP 邮件服务器使用 NTLM 身份验证。 Web 应用程序本身的身份验证也是 NTLM。因此,用户打开 Web 应用程序界面,Web 服务器端在通过 NTLM 进行身份验证的邮件服务器上抓取该用户的收件箱。如果我从不存储(我也无权访问)用户的密码,这可能吗?

有没有办法通过我的网络应用程序链接客户端的浏览器和 IMAP 服务器,以便它们之间发生令牌交换,而我只是充当它们之间的网关。或者,有没有其他方法可以在不知道密码的情况下完成这项任务?

网络应用程序可以是 asp.net/iis 或 php/apache。任何一个选项都对我有用。

【问题讨论】:

  • 可以,但不能使用 NTLM - 您必须使用 Kerberos,它允许中继凭据(并替换 NTLM),但仅在更新版本的 Active Directory 上受支持。 Web 应用程序必须是 IIS(我不知道支持 kerberos 代理凭据的 apache/php 模块)。另一种方法是在 .Net/IIS (google it) 中使用 Impersonation 来允许您的服务伪装成用户 - 但它会要求他们输入密码。当然,这一切都只适用于公司网络内

标签: php asp.net authentication imap ntlm


【解决方案1】:

看来我昨天过得不好,不然不知道为什么我当时想不通,因为它太简单了!

如果启用了 Windows 身份验证,则 Web 应用程序已获取访问该应用程序的交互式用户的上下文。然后,我可以通过集成 Windows 身份验证对启用 NTLM 的 IMAP 服务器进行身份验证,就像在桌面应用程序中一样。

即他们的关键点是网络应用程序中不需要以某种方式将 NTLM 令牌从浏览器传递到 IMAP 服务器。这只是一个两个阶段的过程: - 首先,浏览器(在交互式用户下运行)通过 winapi 函数创建 NTLM 令牌并将其发送到 Web 应用程序,以便最终应用程序获取该交互式用户上下文 - 然后,在交互式用户上下文下运行的 Web 应用程序通过相同的 winapi 函数创建一个新令牌并将其发送到 IMAP 服务器。

【讨论】:

  • 很高兴你解决了它,但我相信你会发现这实际上是 Kerberos 而不是 NTLM - 在支持不同网络上的应用程序或支持较旧的应用程序(Win2K 之前)时,差异很重要客户。
  • 哦,您还可以通过转到about:config 并设置network.automatic-ntlm-auth.trusted-uris 来允许firefox 使用NTLM/Kerberos,如图所示here
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
相关资源
最近更新 更多