- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的 Tomcat 8 应用程序配置了带有 SPNEGO 身份 validator 、 key 表和 SPN 的 Windows 身份验证 (IWA)。它适用于域用户 - 他们在不使用 Kerberos 提示用户和密码的情况下进行身份验证。对于非域用户,我们希望通过使用 native 浏览器弹出窗口输入用户名和密码来允许身份验证。看来,对于这种情况,tomcat 应该使用 NTLM。然而,当非域用户在浏览器弹出窗口中输入登录名和密码时 - 它会重新出现并且在 tomcat 日志中有异常:
2017-01-24 05:15:46,910 [http-nio-127.0.0.1-8455-exec-9] DEBUG org.apache.catalina.authenticator.SpnegoAuthenticator- Unable to login as the service principal
java.security.PrivilegedActionException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.catalina.authenticator.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:230)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:577)
at com.avaya.cas.auth.authenticator.IViewTokenAuthenticator.invoke(IViewTokenAuthenticator.java:212)
at com.avaya.cas.ssl.valves.SSLValve.invoke(SSLValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:240)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:676)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
at sun.security.jgss.GSSHeader.<init>(GSSHeader.java:97)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:306)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
at org.apache.catalina.authenticator.SpnegoAuthenticator$AcceptAction.run(SpnegoAuthenticator.java:323)
at org.apache.catalina.authenticator.SpnegoAuthenticator$AcceptAction.run(SpnegoAuthenticator.java:310)
... 20 more
有一段GSSHeader的代码:
int var2 = decodedHeader.read();
if(var2 != 96) {
throw new GSSException(10, -1, "GSSHeader did not find the right tag");
在我的例子中,var2 是 78('N' 字符)decodedHeader- 是标准的第一个 NTLM 消息,它是在授权 header 中从浏览器发送的。在我的例子中是:
授权:协商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw==
解码后,它将类似于“NTLMSSP...二进制数据...”。因此,此消息的第一个字节始终是“N”(78) 而不是 96,正如 Tomcat 代码所预期的那样。
Tomcat 是否支持 NTLM 身份验证?这很奇怪,因为可以对域用户进行身份验证(这意味着 Tomcat 可以使用提供的 key 表解密来自用户的质询)
最佳答案
这里是 SPNEGO 代码的捐赠者。
GSSHeader did not find the right tag
表示客户端尚未发送任何 SPNEGO token ; you receive a pure NTLM token .当 Kerberos 由于某种原因失败时会发生这种情况,这就是您的情况。
NTLM 非常不同并且非常专有。在这种情况下,服务器充当中间人,将哈希值从客户端传递到域 Controller 。服务器本身不能做任何事情。 Tomcat 无法解密任何内容 without the help of a domain controller .此外,除了 Samba 的内部代码外,没有已知的 NTLM 服务器端实现可作为开源(尤其是 Java 中的)提供。
结果:forget about NTLM并按照我的建议做 here .
注:有IAKERB对于这种情况,但只有 MIT Kerberos 和最多 Heimdal 支持。
关于java - 非域用户的 Tomcat 8 和 Windows NTLM 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953963/
我正在做一些关于 Windows 密码的研究,我有一个小问题。 Windows 对用户密码进行加密并存储在:C:\WINDOWS\system32\config\SAM 通过NTLM算法(加Syske
我一直在尝试在 IIS 托管的网站中使用 service worker 来缓存站点的一些静态内容。该站点是使用 Windows 身份验证的内部应用程序。我已经能够在没有太多麻烦的情况下注册和运行 se
我的任务是创建一个脚本,该脚本登录到公司门户转到特定页面,下载该页面,将其与早期版本进行比较,然后根据所做的更改向特定人员发送电子邮件。最后一部分很简单,但给我带来最大麻烦的是第一步。 在使用 url
我知道有很多关于 SO 的问题与此类似,但我找不到针对这个特定问题的问题。 首先有几点: 我无法控制我们的 Sharepoint 服务器。我无法调整任何 IIS 设置。 我相信我们的 IIS 服务器版
我浏览了大量 SO 文章,甚至浏览了其他网站,但似乎无法让这项服务正常工作。我有一个 SOAP 服务,我正在尝试访问它,它的配置如下:
我正在查看一些遗留代码并试图确定应用程序是使用 ntlm 还是 ntlmv2。 查看源将响应头设置为“WWW-Authenticate”、“NTLM”。 但我不确定这是否表明身份验证类型。 如何区分
我试图使用NTLM身份验证对我使用RestSharp的TeamCity进行REST调用。 IRestClient _client=new RestClient(_url); _client.Authe
我正在尝试使用需要 NTLM 身份验证的 API。此 curl 命令工作正常: curl -X POST --header 'Content-Type: application/json' --hea
我在公司 Internet 代理后面的 VMWare VPC 中运行程序 (Mathematica)。安装在该 VPC 中的各种程序(如 IE、Chrome、Excel、Word、Acrobat Re
我正在用java开发一个应用程序,以从交换服务器(版本10)获取电子邮件附件,我有Windows 7(32位)电脑。我的代码编译成功,但在运行时出错,说- May 20, 2013 5:58:46 P
我最近开始学习 C#。我试图用这种语言生成一个 NTLM 散列,但找不到为我执行此操作的函数。在 python 3.x 中,我将导入 hashlib 并使用 hashlib.new("md4", "H
我正在尝试创建一个应用程序,该应用程序使用用户名和密码连接到使用 NTLM 身份验证(不是我的,所以我无法更改身份验证方法)的网页,并返回页面的源代码,稍后我将使用它提取我需要的信息。 我的问题是身份
我有一个问题。当我尝试访问我的 Web 应用程序时出现此错误 Response header 'WWW-Authenticate' value of 'NTLM TlRMTVNTUAACAAAAAAA
我从调用 WCF 服务的 ASPX 页面收到以下错误。 The HTTP request is unauthorized with client authentication scheme 'Ntlm
尝试在 JavaMail 中使用 NTLM 连接到 Exchange 服务器。我可以连接到 SMTP,但不能连接 IMAP。我还可以通过 OS X Mail.app 应用程序使用相同的主机/用户名/密
我正在尝试从需要 NTLM 登录的 url 中提取信息。 我最初收到 401 错误,经过一些调整后能够拉出页面,说明我输入了无效凭据。 用户名和密码正确,但我无法通过无效凭据页面。 Lgn2.py:
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在运行 curl 命令,以便从 Linux 机器上的 Windows 2012 服务器获取信息。每次,我都会收到 NTLM 握手被拒绝的错误。以前遇到过这个问题吗?可以解决吗? 最佳答案 你试过
在 Visual Studio 2012 中,使用发布配置文件和 Web 部署可以大大简化部署。但是它仍然缺少一些东西,或者我可能还不知道如何使用它。 我更喜欢使用 NTLM 身份验证,而不将用户名和
我使用 Samba 来实现窗口认证。在我的 web.xml 我把这个 NtlmHttpFilter jcifs.http.NtlmHttpFilter jcifs.http.domainC
我是一名优秀的程序员,十分优秀!