2016-06-22 32 views
0

Idp起動のシナリオでSpring SAMLを動作させようとしています。サンプルアプリケーション内でSAML応答メッセージを処理する際に例外が発生しています。しかし、単純なJavaコードで同じレスポンスを解析すると、すべてがうまくいっていて、正常に解析できます。任意の手掛かりが構成可能なパーサーの構成がある場合、私はSAMLProcessorImplクラスでSamlBindingのいくつかの種類を参照してください。それはデコーダを保持しているようだ。SAML応答処理が解析中に失敗する

SAMLメッセージの最初の行は、次のとおり

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="s29e0437f7f268017d5f6a5766797621c301feb737" Version="2.0" IssueInstant="2016-06-21T20:01:18Z" Destination="http://www.xxxxxxxxxxxxxxxxxxxxxxxxx.com:9080/site/saml/SSO"><saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://fmdev.ist.intralink.bns:80</saml:Issuer><samlp:Status xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"> 

、エラーがその文字が「>」で訴えている「2.0:アサーション」> HTTP「属性であるべきで、 『>』または」/ >」ケースです!

​​

以下のフル例外トレース:

によって引き起こさ
org.springframework.security.authentication.AuthenticationServiceException: Error decoding incoming SAML message 
at org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:94) 
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.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.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:241) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

:org.opensaml.ws.message.decode r.MessageDecodingException:org.opensaml.saml2.binding.decoding.HTTPPostDecoder.doDecodeでorg.opensaml.ws.message.decoder.BaseMessageDecoder.unmarshallMessageにおいてそのDOM表現 にメッセージを構文解析エラー(BaseMessageDecoder.java:209) が発生しました( HTTPSostDecoder.java:91) at org.opensaml.ws.message.decoder.BaseMessageDecoder.decode(BaseMessageDecoder.java:79) at org.opensaml.saml2.binding.decoding.BaseSAML2MessageDecoder.decode(BaseSAML2MessageDecoder.java:70) org.springframework.security.saml.processor.SAMLProcessorImpl.retrieveMessageでorg.springframework.security.saml.processor.SAMLProcessorImpl.retrieveMessage(SAMLProcessorImpl.java:105) (SAMLProcessorImpl.java:172)org.springframeworkで で。 security.saml.SAMLProcessingFilter.attemptAuthentication org.opensaml.xml.parse.XMLParserException:30より によって引き起こさ(SAMLProcessingFilter.java:77) ... org.opensaml.xml.parse.StaticBasicParserPool.parse(StaticBasicParserPool.java:237)で無効なXML org.opensaml.ws.message.decoder.BaseMessageDecoder.unmarshallMessage(BaseMessageDecoder.java:186) ... 36 more によって引き起こされた:org.xml.sax.SAXParseException; lineNumber:1; columnNumber:303;要素タイプ "saml:Issuer"の後には、属性指定 ">"または "/>"のいずれかが続かなければなりません。 at org.apache.xerces.parsers.DOMParser.parse(不明なソース) at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(不明なソース) (javax.xml.parsers.DocumentBuilder.parse)(DocumentBuilder.java:私が調べたorg.opensaml.xml.parse.StaticBasicParserPool.parseでorg.opensaml.xml.parse.StaticBasicParserPool $ DocumentBuilderProxy.parse(StaticBasicParserPool.java:673) (StaticBasicParserPool.java:234)

答えて

0

で121) これにもっと。私は動作中のJavaアプリケーションとSpring SAMLの間でDOMパーサに渡される文字に違いがあることに気付きました。詳細を見ると、HTTPPostDecoder:getBase64DecodedMessage()で取り出されたメッセージが切り捨てられていることがわかりました。テストのために私が使用していた符号化されたメッセージは、 "+"記号を持ち、HTTP要求でコード化する必要がありました。 "%2B"に置き換えてください。これを行うと問題が解決しました。

関連する問題