【问题标题】:How to write an NTLM Authentication Module?如何编写 NTLM 身份验证模块?
【发布时间】:2010-08-04 03:17:39
【问题描述】:

我需要为 IIS7 编写一个身份验证模块,其行为与 NTLM 完全相同,但需要进行一些额外的检查。模块对 Active Directory 执行 NTLM(以便模块知道用户是否正常),然后需要调用另一个服务来最终验证访问。

我必须在身份验证模块中执行此操作,因为 IIS 网站上的实际内容是通过自定义 IIS 模块提供的,该模块对我来说是一个黑盒,我无法修改客户端,因为它也是一个黑盒。另外,我不能使用 Windows 安全组,因为我需要调用的服务有它自己的用户数据库。

我发现这篇关于写custom Authentication provider 的文章,但我真的不知道如何针对 Active Directory/Windows 验证用户。

有人对我如何实施 NTLM 有一些提示吗?不一定要以 IIS 为中心,我的问题更多的是“我从客户端的浏览器中得到什么以及如何验证它”?

【问题讨论】:

  • 要对 AD 进行“身份验证”,您可以尝试使用给定的用户名和密码进行连接 - 例如 DirectoryEntry entry = new DirectoryEntry("LDAP://ldapdomain", userName, password); - 如果有效,则用户和密码有效。然后您应该能够找到用户组等。希望我没有完全误解您在寻找什么。这里有很多例子codeproject.com/KB/system/everythingInAD.aspx
  • @Nate 问题是我从来没有得到密码,因为 NTLM 使用哈希/握手而不是通过网络发送真实密码(这将是基本身份验证)。不过还是谢谢。
  • 啊,我明白了 - 您链接到的示例自定义身份验证提供程序听起来像是您将获得用户/密码 :) 那些混蛋 :)

标签: .net authentication iis-7 windows-authentication ntlm


【解决方案1】:

您所描述的听起来不像是身份验证提供程序,听起来您想编写一个授权提供程序。 为此,我将处理 AuthorizeRequest 并使用已经具有有效 Windows 身份验证令牌的 HttpContext.User(假设您启用了 Windows 身份验证)。 此时,您可以使用 IsUserInRole 和其他 API 从 ActiveDirectory 获取附加数据,或使用 System.DirectoryServices 获取附加数据。只要确保你做一些缓存,因为每个请求都去 AD 可能是一个性能问题。至少 IIS 会为您处理具有缓存的 Windows 身份验证。

【讨论】:

  • 很好,不知道我可以两者兼得,我认为授权是应用程序的事情。我会试试的。
【解决方案2】:

看看Waffle,它用Java 完成了所有的动作。因此,您可以将其反向移植到另一种语言/基础架构中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多