Printemps SAML sur Weblogic 12c
-
22-12-2019 - |
Question
Je suis actuellement en train de travailler sur une application qui utilise le Printemps SAML (http://projects.spring.io/spring-security-saml/ projet dans le cadre de notre authentification.Je sais qu'il est encore en RC mais c'est l'application de notre travail.Nous avons la bibliothèque intégrée et qui fonctionne parfaitement lorsqu'il est déployé à Tomcat7, mais sont en train de problèmes lors du déploiement de Weblogic 12c (12.0.1.2).Sur Weblogic, sans jeter toutes les erreurs de l'affirmation de valeurs sera decrpyted comme vide pas d'erreurs.
Le problème semble être dans la Xerces bibliothèques.Printemps SAML (en raison de OpenSAML) exige 2.10.0 autant que je suis capable de le dire, mais Weblogic fournit 2.8.0 de la Xerces de la bibliothèque.J'ai tenté de mettre à jour Xerces version de bibliothèque en incluant la xercesImpl et xml api pots dans les projets WEB-INF/lib du dossier.Ceci résout le decrpyting problème avec le Printemps, SAML, mais les sauts de Weblogics capacité d'analyser des pages JSP.J'ai inclus une partie de la trace de la pile pour la non-mise à jour et mise à niveau Xerces exceptions ci-dessous.Si quelqu'un a une idée de comment résoudre ce problème de sorte que le Printemps SAML peut fonctionner de Weblogic en pas de rupture de la fonctionnalité par défaut, je serais très heureux.
C'est la trace de la pile avant la mise à jour de Xerces
2014-07-31 10:43:37,675 [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG org.apache.xml.security.algorithms.JCEMapper - Request for U
RI http://www.w3.org/2001/04/xmlenc#aes256-cbc
2014-07-31 10:43:37,675 [[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'] DEBUG org.apache.xml.security.encryption.XMLCipher - JCE Algorithm
= AES/CBC/ISO10126Padding
<Jul 31, 2014 10:43:37 AM EDT> <Error> <HTTP> <BEA-101020> <[ServletContext@1538876008[app:intranet module:intranet.war path:null spec-version:3.0]] Servlet failed with an
Exception
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.valueOf(Integer.java:582)
at org.opensaml.common.SAMLVersion.valueOf(SAMLVersion.java:89)
at org.opensaml.saml2.core.impl.AssertionUnmarshaller.processAttribute(AssertionUnmarshaller.java:71)
at org.opensaml.xml.io.AbstractXMLObjectUnmarshaller.unmarshallAttribute(AbstractXMLObjectUnmarshaller.java:254)
at org.opensaml.xml.io.AbstractXMLObjectUnmarshaller.unmarshall(AbstractXMLObjectUnmarshaller.java:113)
at org.opensaml.xml.encryption.Decrypter.decryptDataToList(Decrypter.java:479)
at org.opensaml.xml.encryption.Decrypter.decryptData(Decrypter.java:403)
at org.opensaml.saml2.encryption.Decrypter.decryptData(Decrypter.java:141)
at org.opensaml.saml2.encryption.Decrypter.decrypt(Decrypter.java:69)
at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:190)
at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:82)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
at org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84)
C'est la trace de la pile après la mise à jour de Xerces pour 2.10.0.
weblogic.servlet.jsp.CompilationException: Failed to compile JSP /WEB- INF/jsp/errors/500.jsp
500.jsp:1:1: The validator class: "org.apache.taglibs.standard.tlv.JstlCoreTLV" has failed with the following exception: "java.lang.ClassCastException: weblogic.xml.jaxp.Re
gistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory".
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
^-------------------------------------------------------------^
500.jsp:2:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during parsing of the .tld file.
<%@ taglib prefix="int" uri="intranet"%>
^----^
500.jsp:2:5: No tag library could be found with this URI. Possible causes could be that the URI is incorrect, or that there were errors during parsing of the .tld file.
<%@ taglib prefix="int" uri="intranet"%>
^----^
500.jsp:6:3: This tag can only appear as a subelement of a standard or custom action. Exceptions are: jsp:body, jsp:attribute, jsp:expression, jsp:scriptlet, and jsp:declaration.
<jsp:attribute name="minifiedJs">
^-----------^
500.jsp:8:3: This tag can only appear as a subelement of a standard or custom action. Exceptions are: jsp:body, jsp:attribute, jsp:expression, jsp:scriptlet, and jsp:declaration.
<jsp:attribute name="nonMinifiedJs">
^-----------^
500.jsp:11:3: This tag can only appear as a subelement of a standard or custom action. Exceptions are: jsp:body, jsp:attribute, jsp:expression, jsp:scriptlet, and jsp:declaration.
<jsp:body>
^------^
at weblogic.servlet.jsp.JavelinxJSPStub.reportCompilationErrorIfNeccessary(JavelinxJSPStub.java:243)
at weblogic.servlet.jsp.JavelinxJSPStub.compilePage0(JavelinxJSPStub.java:179)
at weblogic.servlet.jsp.JavelinxJSPStub.access$000(JavelinxJSPStub.java:50)
at weblogic.servlet.jsp.JavelinxJSPStub$1.run(JavelinxJSPStub.java:108)
at java.security.AccessController.doPrivileged(Native Method)
at weblogic.servlet.jsp.JavelinxJSPStub.compilePage(JavelinxJSPStub.java:105)
at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:247)
at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:200)
at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java:403)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:295)
at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:478)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:367)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
...
La solution
L'approche suivante permet le regroupement de la coutume Xerces et Xalan bibliothèques dans Weblogic:
- Créer oreille archive
spring-security-saml2-sample.ear
- Inclure Printemps SAML fichier
spring-security-saml2-sample.war
l'intérieur de l'oreille, la guerre doit contenir propre version de Xerces et Xalan. Créer le fichier
META-INF/application.xml
l'intérieur de l'oreille avec le contenu suivant:<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5"> <module> <web> <web-uri>spring-security-saml2-sample.war</web-uri> <context-root>spring-security-saml2-sample</context-root> </web> </module> </application>
Créer le fichier
META-INF/weblogic-application.xml
avec le contenu suivant:<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.oracle.com/technology/weblogic/920/weblogic-application.xsd"> <xml> <parser-factory> <saxparser-factory> org.apache.xerces.jaxp.SAXParserFactoryImpl </saxparser-factory> <document-builder-factory> org.apache.xerces.jaxp.DocumentBuilderFactoryImpl </document-builder-factory> <transformer-factory> org.apache.xalan.processor.TransformerFactoryImpl </transformer-factory> </parser-factory> </xml> <prefer-application-packages> <package-name>org.opensaml.*</package-name> <package-name>org.apache.xerces.*</package-name> <package-name>org.apache.xalan.*</package-name> </prefer-application-packages> </weblogic-application>
Déployer l'archive
Autres conseils
pour quiconque qui vient sur cela plus tard.J'ai fini par résoudre le problème en mettant à jour la version 2.9.0 de Xercesimpl.Cela semble être une version de tache douce pour ce problème, même si elle est inférieure à ce que OpenSaml demande qu'il corrige le problème tout en ne faisant pas causer d'autres problèmes avec Weblogic (autant que j'ai rencontré actuellement).XERCES 2.10.0 Requis Une version mise à jour de XML-API sur la fonction et qui causait les problèmes avec Weblogic (2.9.0 semble fonctionner avec la version de XML-API inclus dans Weblogic).
Avez-vous joué avec prefer-web-inf-classes
pour un fichier war ou prefer-application-packages
pour un fichier ear?L'un d'entre eux sera probablement résoudre le problème:
Dans weblogic-application.xml:
<wls:prefer-application-packages>
<wls:package-name>org.apache.xerces.xni.parser.*</wls:package-name>
<wls:package-name>org.apache.xerces.parsers.*</wls:package-name>
<wls:package-name>org.apache.xalan.*</wls:package-name>
</wls:prefer-application-packages>
Dans weblogic.xml:
<wls:container-descriptor>
<wls:prefer-web-inf-classes>true</prefer-web-inf-classes>
</wls:container-descriptor>
Voir ces Oracle docs ici