我正在尝试使用Kerberos/SpNego为Java WebApp设置SSO.我正在使用:
克服了如何在Tomcat/linux服务器上配置kerberos中描述的问题?,我现在坚持以下错误:
org.springframework.security.authentication.BadCredentialsException: Kerberos validation not succesful
at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator.validateTicket(SunJaasKerberosTicketValidator.java:70) ~[spring-security-kerberos-core-1.0.0.RELEASE.jar:1.0.0.RELEASE]
at org.springframework.security.kerberos.authentication.KerberosServiceAuthenticationProvider.authenticate(KerberosServiceAuthenticationProvider.java:64) ~[spring-security-kerberos-core-1.0.0.RELEASE.jar:1.0.0.RELEASE]
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) ~[spring-security-core-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.kerberos.web.authentication.SpnegoAuthenticationProcessingFilter.doFilter(SpnegoAuthenticationProcessingFilter.java:145) ~[spring-security-kerberos-web-1.0.0.RELEASE.jar:1.0.0.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:110) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) [spring-security-web-3.2.7.RELEASE.jar:3.2.7.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261) [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.55]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.55]
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试将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) 我是MOngoDB + Java配置的新手.我试图从远程mongodb服务器到Java应用程序的连接.我想使用GSSAPI机制来连接mongotemplate.下面的代码已成功执行.下面的代码来自我的配置文件.
List<ServerAddress> serverAddresses = new ArrayList<ServerAddress>();
ServerAddress address = new ServerAddress(host, port);
serverAddresses.add(address);
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
MongoCredential credential = MongoCredential.createGSSAPICredential(userName);
credential.withMechanismProperty("SERVICE_NAME", gssapiServiceName);
credential.withMechanismProperty("CANONICALIZE_HOST_NAME", true);
credentials.add(credential);
return new MongoClient(serverAddresses, credentials);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行下面的代码时,我会遇到异常
DB db = mongoTemplate.getDb();
Set<String> dbCollections1 = db.getCollectionNames();
Run Code Online (Sandbox Code Playgroud)
例外:
GSSException:没有提供有效凭据(机制级别:无法找到任何Kerberos tgt)sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147)sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory) .java:122)sun.security.jgss.GSSManagerImpl.getCredentialElement(GSSManagerImpl.java:193)at sun.security.jgss.GSSCredentialImpl.add(GSSCredentialImpl.java:427)at sun.security.jgss.GSSCredentialImpl.(GSSCredentialImpl .java:62)在sun.security.jgss.GSSManagerImpl.createCredential(GSSManagerImpl.java:154)com.mongodb.DBPort $ GSSAPIAuthenticator.getGSSCredential(DBPort.java:622)com.mongodb.DBPort $ GSSAPIAuthenticator.createSaslClient( DBPort.java:593)com.mongodb.DBPort $ SaslAuthenticator.authenticate(DBPort.java:895)at com.mongodb.DBPort.authenticate(DBPort.java:432)at com.mongodb.DBPort.checkAuth(DBPort.java) :443)com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:289)at com.mongodb.DBTCPConnector.call(DBTCPConn)ector.java:269)com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84)at com.mongodb.DB.command(DB.java:320)at com.mongodb.DB.command(DB.java:299) )com.mongodb.DB.command(DB.java:388)com.mongodb.DBApiLayer.getCollectionNames(DBApiLayer.java:152)
是否可以进行可选的 kerberos 身份验证?
我想要的是:如果客户端(浏览器)不在域中,它被重定向到用户名/密码网络登录。否则它会做 SPNEGO 做 Kerberos 认证。
有什么解决办法吗?如果是,我们需要什么配置?
我正在我现有的 java spring 应用程序中实现 kerberos 身份验证。我的 unix 团队为我提供了 SPN、krb5.conf 和 keytab 文件。我正在努力使用以下代码和配置,但无法从用户异常中获取密码,如下面的附加日志所示。
任何人都可以纠正我如果我做错了什么或者可能出了什么问题?如果您需要更多信息,请告诉我。如果有人能告诉,如何验证 kerberos 配置是否正确,那就太好了?
这是我尝试过的。我在用:
我的 security-config.xml 是:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<beans:bean class="com.ci.util.TrimmingPropertyPlaceholderConfigurer">
<beans:property name="searchSystemEnvironment" value="true" />
<beans:property name="locations">
<beans:list>
<beans:value>file:${install.home}/config/application.properties
</beans:value>
<beans:value>file:${install.home}/config/environment.properties
</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<http entry-point-ref="spnegoEntryPoint" auto-config="false">
<intercept-url pattern="/selectBlacklisting*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/j_spring_security_check*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" />
<custom-filter ref="spnegoAuthenticationProcessingFilter" position="BASIC_AUTH_FILTER" />
<form-login login-page="/selectBlacklisting.form" default-target-url="/" always-use-default-target="true"/>
</http>
<authentication-manager alias="authenticationManager"> …Run Code Online (Sandbox Code Playgroud) java spring kerberos spring-security spring-security-kerberos
我正在使用基于Windows域登录的SSO进行Web应用,为此我选择验证Kerberos票证.但是现在我遇到了一个我无法找到解决方案的问题.我设法验证一个没有例外的票证,但当我试图获取userName时,NullPointerException抛出,因为用户名是null,我不知道哪里有问题.
如果在验证期间没有出现任何异常,为什么用户名为null?
我如何获得userName:
String clientName = gssContext.getSrcName().toString();
我基于此创建了我的客户端:
http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/single-signon.html
更新1:
我如何设置内容,只需复制粘贴表格/sf/answers/1781560371/:
final Oid spnegoOid = new Oid("1.3.6.1.5.5.2");
GSSManager gssmgr = GSSManager.getInstance();
// tell the GSSManager the Kerberos name of the service
GSSName serviceName = gssmgr.createName(this.servicePrincipal, GSSName.NT_USER_NAME);
// get the service's credentials. note that this run() method was called by Subject.doAs(),
// so the service's credentials (Service Principal Name and password) are already
// available in the Subject
GSSCredential serviceCredentials = gssmgr.createCredential(serviceName,
GSSCredential.INDEFINITE_LIFETIME, …Run Code Online (Sandbox Code Playgroud) 我需要实现Kerberos身份验证并获取经过身份验证的用户的AD用户组.我只能使用Kerberos协议,所以我无法使用LDAP查询到AD.
看起来,Kerberos身份验证可以使用Spring安全性来实现,但检索组并不是那么简单.
根据如何从kerberos票检索组成员资格?并获取广告组使用Kerberos在Java中票,还有在Java中读取PAC领域没有原生支持.
更新:看起来http://jaaslounge.sourceforge.net/中有PACdecoder .是否有任何弹簧安全解决方案来获取角色或我应该使用外部类?
java authentication spring-security spring-security-kerberos
我正在使用 Spring Security Kerberos 使用 Kerberos 身份验证的站点上工作。所以,我们不支持 NTLM。当用户发出未经身份验证的请求时,服务器将回复带有标题 WWW-Authenticate: Negotiate 的 HTTP 401。
问题:对于某些用户/配置,浏览器将发送 NTLM 凭据。服务器不一定在 Windows 上运行,因此它无法处理 NTLM 凭据。
据我了解,“协商”的意思是“如果可能,请向我发送 Kerberos,否则发送 NTLM”。是否有不同的设置说“只向我发送 Kerberos”?或者有什么方法可以告诉浏览器该站点仅支持 Kerberos?
作为后续,为什么浏览器没有 Kerberos 可用?在这种情况下,他们登录到同一个域。也许他们的凭据已过期?
我们正在尝试使用Kerberos身份验证构建Spring Web应用程序.我们的开发机器是企业AD域的一部分.我们在VM中有一个本地KDC来测试kerberos,但是没有对AD的信任.除了来自AD的票证之外,网络身份管理器还能够从该域获取票证.
从浏览器进行测试时,似乎来自域登录的票证被发送到服务器,而不是测试域的票证,未知客户端主体失败并退回到NTLM.
运行tomcat服务器和测试KDC的主机将添加到受信任站点,并为受信任站点启用自动身份验证.将其添加到本地Intranet也没有什么区别.
是否可以从任何浏览器发送通过"网络身份管理器"而不是当前登录的AD用户票证获得的域的相应票证?
我正在尝试使用 Active Directory 凭据执行 Spring Security Kerberos,如http://docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/reference/htmlsingle/#samples-sec-服务器双赢身份验证。我想说我已经解决了大部分问题(SPN、keytabs 等)。现在我有一个校验和失败。假设我更改了我的主体名称,我会收到一个 AES 加密错误。
我在 RHEL 6 上使用 Spring Boot 和来自https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server 的Oracle Java 1.8 + JCE 示例-win-auth
这是我运行 jar 时得到的结果
Debug 为 true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache is null isInitiator false KeyTab is /home/boss/webdev125-3.keytab refreshKrb5Config is false principal is http/webdev@EXAMPLE.ORG tryFirstPass is false useFirstPass is false storePass is false clearPass是假的
主体是 http/webdev@EXAMPLE.ORG 将使用 keytab Commit Succeeded
....
2015-11-25 11:29:09.631 DEBUG 5559 --- [nio-8080-exec-3] .a.KerberosServiceAuthenticationProvider …
java spring kerberos spring-security spring-security-kerberos
kerberos ×8
java ×7
spring ×4
jgss ×2
mit-kerberos ×1
mongodb ×1
ntlm ×1
soap ×1
spring-mvc ×1