我正在尝试部署Security扩展的一部分示例应用程序,使用SSOCircle作为IDP,但我遇到了许多问题。我真的很希望有人帮我解决这个问题。
这就是我所做的。
我从:https://github.com/spring-projects/spring-security-saml/tree/1.0.0.RELEASE下载了源代码,并通过:mvn package构建了示例应用程序。然后我将WAR文件部署到Tomcat的一个独立实例中(v7.0.41)。
我启动了这个应用程序:http://server:8550/spring-security-saml2-sample,点击了元数据管理,点击了Login按钮,但是我一直在重定向回http://server:8550/spring-security-saml2-sample/saml/web/metadata/login。
通过更改行,绕过元数据管理的登录:
<security:intercept-url pattern="/saml/web/**" access="ROLE_ADMIN"/>
在securityContext.xml中:
<security:intercept-url pattern="/saml/web/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
回到http://server:8550/spring-security-saml2-sample/saml/web/metadata,我现在可以单击Generate新的服务提供者元数据按钮。我为实体ID输入了一个值,接受了其余选项的默认值,并单击了生成元数据。我按照指示将SP元数据文件保存到/WEB-INF/classes/metadata/serverId_sp.xml,并将SP配置数据添加到securityContext.xml中的metadata bean中。我登录到https://idp.ssocircle.com/sso并注册了SP元数据。然后,我注释掉了这两次出现的情况:
<security:custom-filter before="FIRST" ref="metadataGeneratorFilter"/>
在securityContext.xml中重新启动应用程序。
在主页上,我选择了http://idp.ssocircle.com选项,并单击了Start单点登录。我被正确地重定向到SSOCircle;我输入了用户名和密码,并被重定向回2样例应用程序,但是显示了以下错误:
org.springframework.security.authentication.AuthenticationServiceException: Error validating SAML message
at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:95)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
at org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:195)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Caused by: org.opensaml.common.SAMLException: InResponseToField of the Response doesn't correspond to sent message a2ei6e3068d8fi72g4a0fcc1j41142
at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:139)
at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82)
... 29 more对于这个特定的问题,我不认为这个答案(Spring与WSO2标识服务器的集成,SAML消息ID未重新定义)是相关的,因为我使用SSOCircle作为我的IDP;也就是说,我的SP和IDP的域是不同的。
Spring文档中的关于故障排除的一节提供了一种通过修改securityContext.xml中的contextProvider bean来禁用检查securityContext.xml设置的方法。我实现了这个修复,并再次重新启动了测试应用程序。
我可以像以前一样通过SSOCircle登录,但是现在当我被重定向回spring-security-saml2 2样例时,我总是被重定向回http://server:8550/spring-security-saml2-sample/saml/discovery?entityID=serverId&returnIDParam=idp;也就是说,没有显示登录用户的详细信息(如http://saml-federation.appspot.com/的在线演示版本),而且我从未看到全局注销和 Logout按钮。即使我在浏览器中显式地输入了URL http://server:8550/spring-security-saml2-sample,我也总是被重定向回http://server:8550/spring-security-saml2-sample/saml/discovery?entityID=serverId&returnIDParam=idp。
由于我正在将示例应用程序部署到Tomcat的一个独立实例中,所以我还进行了这个答案中建议的更改:Tomcat上的Spring安全SAML元数据URL。然而,这种行为仍然是一样的。
所以,这就是我现在被困的地方。知道是什么导致了我的问题吗?为什么我的示例应用程序的版本与在线演示版本没有相同的行为?
任何帮助都将受到感谢--谢谢。
更新
网络流量的HAR文件在这里:http://pastebin.com/EUPHA4gE
到stdout的调试输出相当长;我将其分为两部分:
第一部分:http://pastebin.com/TkZS7uZM
第二部分:http://pastebin.com/mrRkLs2T
我还发布了Tomcat访问日志,如果这是帮助的话:http://pastebin.com/992btULh
更新2
更新后的网络流量的HAR文件如下所示:http://pastebin.com/EUPHA4gE
我部署的原始war文件(在进行上述任何更改之前)都在这里:https://dl.dropboxusercontent.com/u/18025575/spring-security-saml2-sample.war
如上文所述,包含对各种文件的配置更改的war文件如下所示:https://dl.dropboxusercontent.com/u/18025575/spring-security-saml2-sample-with-changes.war
发布于 2015-04-03 10:40:19
您正在使用的示例,我也使用了相同的,其工作正常。唯一的问题是您必须了解Spring是如何工作的。
很简单。1.将示例应用程序作为一个新项目部署到tomcat中(不要做任何更改)。
2.运行应用程序并使用路径(/saml/元数据)下载默认元数据。例如。如果您的服务器是localhost:8080/samlApplication,那么完整路径将是localhost:8080/ samlApplication /saml/元数据注:samlApplication将是您的应用程序名。
你的问题是元数据。IDP使用SP元数据信息将用户重定向回SP,因此如果您在重定向中有prob,那么SP元数据中就有一个prob。
您是否可以将所生成的元数据发布,以便便于检查。
下面是我使用过的演示应用程序。按照上面的指示去做,你会成功的。https://dl.dropboxusercontent.com/u/23694298/spring-saml-sso-sample.rar
https://stackoverflow.com/questions/29209694
复制相似问题