相关疑难解决方法(0)

使用Kerberos/Spring Security/IE/Active Directory检测到"检测到令牌"错误(NTLM不是Kerberos)

我们无法让Spring Security/Kerberos/AD适用于我们的Web应用程序.我们的诊断是我们的AD服务器发送一个NTLM令牌(我们可以告诉它以"TlRMTVNT ....."开头)到IE和IE然后将它发送到我们的应用程序并且它失败了.我们的AD服务器应该向IE发送Kerberos/SPNEGO令牌.

"活动部件"如下:

  • Spring Security 3.0(修补)
  • Microsoft Windows Server Enterprise 2003 SP1 Active Directory
  • IE 8
  • Tomcat(TC Server 6.0)
  • Java 1.6

我们已按照此处的说明详细说明了所有内容:

https://spring.io/blog/2009/09/28/spring-security-kerberos-spnego-extension

这包括:

  • 创建普通用户作为服务主体(与应用程序所在的计算机名称相同).我们设置了以下帐户选项:
    • 已禁用'使用必须在下次登录时更改密码'
    • 已启用'密码永不过期'
    • 启用'使用Kerberos DES ...'
    • 已禁用'不需要Kerberos预身份验证'
    • 注意:Server 2003不显示"此帐户支持Kerberos AES 128位..."和"此帐户支持Kerberos AES 256位..."选项
  • 使用"ktpass.exe"将服务主体名称(SPN)分配给此新用户,并将此用户密钥导出到密钥表文件.使用'ktpass/out ourweb.keytab/mapuser ourweb.testdomain.ourcompany.co.uk@TESTDOMAIN.OURCOMPANY.CO.UK/princ HTTP/ourweb.testdomain.ourcompany.co.uk@TESTDOMAIN.OURCOMPANY.CO.UK/pass*"
  • https://src.springframework.org/svn/se-security/trunk下载源代码.
  • 将密钥表文件从AD服务器复制到源代码(应用程序)的WEB-INF/etc.
  • 对文件SunJaasKerbersoTicketValidator.java进行了更改以读取keytab文件.(解决应用程序无法从Java类路径读取keytab文件的错误)options.put("keyTab","C:\ se-security\spring-security-kerberos\spring-security-kerberos-sample\SRC \主\ web应用\ WEB-INF \等\ ourweb.keytab");
  • 配置web.xml以使用spnego.xml.contextConfigLocation /WEB-INF/spnego.xml
    • 通过提供我们的服务主页名称和密钥表文件位置,配置Spring Security(spnego.xml)以使用Kerberos(SpnegoEntryPoint,SpnegoAuthenticationProcessingFilter和KerberosServiceAuthenticationProvider bean).
    • 配置spnego.xml以读取在WEB-INF/etc中复制的keytab文件.

当我们启动TC服务器时,我们可以很好地看到事情初始化(即没有错误 - "从keytab获得的原则密钥"):

Creating instance of bean 'org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator#10fa4b8' 
Invoking afterPropertiesSet() on bean with name 'org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator#10fa4b8' 
Config name: C:\WINDOWS\krb5.ini
Debug is  true …
Run Code Online (Sandbox Code Playgroud)

java kerberos spring-security

30
推荐指数
3
解决办法
3万
查看次数

Kerberos错误:GSSHeader找不到正确的标记

我正在尝试将Kerberos身份验证连接到SOAP服务wsdl url.我能够成功建立连接并进行服务呼叫.启动服务器后,我能够至少进行一次成功的服务呼叫.但是在几次请求(1或更多)之后,我突然得到无效的令牌错误.一旦我收到错误,未来的呼叫就不起作用,错误仍然存​​在.

如果我重新启动服务器,那么服务调用至少会运行一次.以上循环继续.

我无法弄清楚为什么突然令牌失效,尽管它早先工作了.并重新启动服务器使令牌再次有效.

这是错误堆栈跟踪:

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.initSecContext(GSSContextImpl.java:237)
        at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
Run Code Online (Sandbox Code Playgroud)

java soap kerberos jgss spring-security-kerberos

10
推荐指数
1
解决办法
5411
查看次数