【问题标题】:Java way of validating NTLM authentication via LDAP to retrieve username and domain通过 LDAP 验证 NTLM 身份验证以检索用户名和域的 Java 方法
【发布时间】:2018-06-04 10:19:21
【问题描述】:

客户已请求实施类似 SSO 的简单 NTLM 验证器。因此,我需要找到一种方法来验证在尝试连接到服务器时是否登录了哪个用户。

使用 JavaScript,我花了大约 5 分钟来完成这个包: https://www.npmjs.com/package/express-ntlm

您可以为包定义 LDAP 服务器,NTLM 协商将导致“域名”、“用户名”、“工作站”和“已验证”值。我已经成功实现了。

是否有库或其他本地方法可以像使用 NodeJS-Server 一样简单地使用 Java 完成这项工作?

我发现的一些解决方案需要我没有或不想提供的凭据。 JavaScript 解决方案仅与提供的 LDAP 服务器一起运行,所以我很确定我不需要它们。

【问题讨论】:

  • 您不需要 LDAP,只需要带有 NTLM 提供程序的 JAAS。
  • EJP 是对的。添加 LDAP 只是不必要的复杂层。你可以使用一种叫做 NTLM Relay 的黑客技术,但是伙计……
  • 说到 nodeJS-Way,我在 10 行代码解决方案中看不到任何“不必要的复杂层”。也许这不是最好的方法,但使用这种方法,我只需要配置 1 个 URL,它就可以像魅力一样工作......但如前所述:我还没有找到这样做的 Java 库

标签: java authentication ldap ntlm


【解决方案1】:

您的问题对我来说并不完全清楚,但我会尝试为 native 部分提供答案,并同时增强这个answer,这或多或少是关于同一主题的。

从 JDK 7 开始,我们看到下面的 com.sun.security.ntlm 原生包是

$ unzip -l 1.7/jre/lib/rt.jar | grep -i ntlm
 4243  2015-04-10 19:56   com/sun/security/ntlm/Client.class
 1568  2015-04-10 19:56   com/sun/security/ntlm/NTLM$Reader.class
 1831  2015-04-10 19:56   com/sun/security/ntlm/NTLM$Writer.class
 6486  2015-04-10 19:56   com/sun/security/ntlm/NTLM.class
  617  2015-04-10 19:56   com/sun/security/ntlm/NTLMException.class
 3763  2015-04-10 19:58   com/sun/security/ntlm/Server.class
  939  2015-04-10 19:56   com/sun/security/ntlm/Version.class
  ... ...

不幸的是,这个包并不打算直接使用,正如Oracle JDK-6982971 bug 中所解释的那样:

com.sun.security.ntlm 包和里面的类不是 暴露为 NON_CORE_PKGS 并且对 javac 不可见。

从那里,native 解决方案依赖于这种解决方法:使用您可以从 here 下载的所有 com.sun.security.ntlm 源文件编译您的代码,例如 @987654324 @, NTLM.java,.. Server.verify 方法使您可以访问您在问题中提到的参数。请注意,此调试属性可以帮助您 (-Dntlm.debug)。

在此实现中,请注意它直到 JDK 1.7 才能编译,因为调用了 String in switch Statement,尽管您可以轻松地向后移植到早期的 Java 版本。

我建议使用可用的最新源代码,因为在(例如 Java 7)Support Release Notes 中可能难以跟踪错误。在撰写本文时,据我所知,当前使用的版本已列在OpenJDK JDK-7150092 bug 中。

我暂时没有用这种方法编写任何服务器,只编写了一个大约 100 行的 HTTP 客户端,这演示了该技术。最后一件事要知道,我所说的原生类不是多线程的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多