2013-03-15 91 views
1

我指的是下面的文章:http://wso2.org/library/articles/2010/07/saml2-web-browser-based-sso-wso2-identity-serverWSO2身份服务器 - SAML SSO - 被动STS例如不工作

本例将身份服务器4.0.0,但不能与Identity服务器4.1.0 ...

4.1.0 - 返回SAML响应,但当它试图反序列化消息时,依赖方应用程序会引发异常。这个示例是否可以更新以与IS的更高版本一起使用?

这里的信赖方应用程序的堆栈跟踪:从依赖方应用

SEVERE: Servlet.service() for servlet [SAML2ConsumerServlet] in context with path [/saml2.demo] threw exception 
java.lang.NullPointerException 
    at org.wso2.identity.saml2.demo.SamlConsumerManager.getResult(SamlConsumerManager.java:278) 
    at org.wso2.identity.saml2.demo.SamlConsumerManager.processResponseMessage(SamlConsumerManager.java:252) 
    at org.wso2.identity.saml2.demo.SAML2ConsumerServlet.doPost(SAML2ConsumerServlet.java:77) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    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:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

的源代码:https://svn.wso2.org/repos/wso2/people/suresh/saml2/saml2-demo/src-dist

回答

2

好像解码器操作尚未得到实施,而且4.0.0起响应使用Base64进行编码,因此您可能无需在SamlConsumerManager.java中执行更换器

private String samlDecoder(String messsage)throws Exception {

// Base64 decode 

//byte[] xmlBytes = messsage.getBytes("UTF-8"); 
byte[] base64DecodedByteArray = Base64.decode(messsage); 

// Inflate (uncompress) the AuthnRequest data 
// First attempt to unzip the byte array according to DEFLATE (rfc 1951) 

Inflater inflater = new Inflater(true); 
inflater.setInput(base64DecodedByteArray); 
// since we are decompressing, it's impossible to know how much space we 
// might need; hopefully this number is suitably big 
byte[] xmlMessageBytes = new byte[5000]; 
int resultLength = inflater.inflate(xmlMessageBytes); 

if (!inflater.finished()) { 
    throw new RuntimeException("didn't allocate enough space to hold " 
      + "decompressed data"); 
} 

inflater.end(); 

String decodedResponse = new String(xmlMessageBytes, 0, resultLength, 
     "UTF-8"); 

return decodedResponse; 

}

public Map<String, String> processResponseMessage(String responseMessage) { 

XMLObject responseXmlObj = null; 

try { 
    **responseXmlObj = unmarshall(samlDecoder(responseMessage));** 

希望答案能够帮助您,因为我能够运用以下

+0

感谢您的帮助后,让这件事的工作。欣赏它。 – Adam 2013-03-25 16:07:20

相关问题