Windows 2k8 中 JCIFS / Lan-Manager 身份验证级别设置中的 getUserPrincipal()

Windows 2k8 中 JCIFS / Lan-Manager 身份验证级别设置中的 getUserPrincipal()

我必须找出 JCIFS 在“getUserPrincipal()”属性中存储用户主体的具体格式。因此,我创建了一个如下的测试环境:

  • Windows Server 2008 域控制器
  • 域名为“MYDOMAIN”
  • Active Directory 中有许多测试用户
  • Tomcat 应用程序服务器与我的 Web 应用程序(它只是读取用户主体并显示其值)。

用户应使用 SSO 登录到 Web 应用程序,因此我需要 jcifs 用于存储用户的格式。(例如 user@MYDOMAIN 或 MYDOMAIN\user...)

我使用 Kerberos 方法测试了其他 SSO 框架的身份验证,并且它可以按预期运行。

我现在正尝试通过 JCIFS 的 NTLMHttpFilter 使用 SSO。当我尝试登录时,我收到以下错误消息:

jcifs.smb.SmbException: The parameter is incorrect.
    jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:541)
    jcifs.smb.SmbTransport.send(SmbTransport.java:641)
    jcifs.smb.SmbSession.sessionSetup(SmbSession.java:322)
    jcifs.smb.SmbSession.send(SmbSession.java:224)
    jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
    jcifs.smb.SmbSession.logon(SmbSession.java:153)
    jcifs.smb.SmbSession.logon(SmbSession.java:146)
    jcifs.http.NtlmHttpFilter.negotiate(NtlmHttpFilter.java:189)
    jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:121)

关于我用来配置此功能的文档,这是组策略的一个已知问题。文档中指出,我必须更改组策略“Networkaccess: lan-manager 身份验证级别”才能响应 NTLMv1 请求。

我已经这样做了,但仍然不起作用。所以我还必须在客户端计算机上配置相同的策略。我必须更改策略,以便客户端计算机发送 NTLMv1。但它总是发送 NTLMv2 令牌。

现在的问题是我无法更改此设置。 (我之前已经可以了)因为选择身份验证方法的下拉框是“灰色”的。

客户端的 Lan-manager 身份验证级别

编辑:为了清楚起见,此对话框位于客户端的“本地安全策略”中

从该屏幕截图中您可以看到,选择的方法是“仅发送 NTLMv2 响应”,这是错误的设置,我很确定这是导致上述错误的原因。

我现在的问题是,为什么我无法更改此设置?为什么它变灰了?

答案1

这是因为您有一个管理此功能的组安全策略,因此您无法在本地修改它。运行 gpmc.msc 而不是 gpedit.msc,如果您是管理员,您应该能够修改它。

相关内容