掲示板

HOOK SAML2 LIFERAY

thumbnail
8年前 に FERNANDO ROSERO によって更新されました。

HOOK SAML2 LIFERAY

New Member 投稿: 2 参加年月日: 15/12/10 最新の投稿
Buen día a todos!!!!!!

Mi consulta puede ser un poco compleja entonces intentaré explicarme a lo máximo. Empiezo. . . .

Estoy haciendo un HOOK que funciona cuando hago autologin, este hook recibe por post en la request un atributo "SAMLResponse" que contiene información del contenido de un archivo xml con structura SAML2 xml, esta información llega en base64 y la convierto en String, hasta ahi todo bien, el hook y su funcionamiento va perfecto. El problema que tengo es cuando intento convertir esa información en un OBJETO SAML2 para parsear la informacíon, en si lo que mas necesito es la etiqueta NameID del xml, para realizar una búsqueda de Usuarios de Liferay si exite en User lo redirecciono al portal, caso contrario lo hecho.

En resumen el hook recibe el SAML2 por POST lo parsea creando un objeto SAMLObject, obtiene el NameID, busca el NameID en la lista de User de Liferay, si existe ese usuario lo tengo que redirigir al portal caso contrario lo hecho.

El código que estoy utilizando es el siguiente (Es lo que he encontrado buscando por internet):

String responseMessage = ParamUtil.getString(request, "SAMLResponse", "");

//decodifico base 64
byte[] base64DecodedResponse = Base64.decode(responseMessage);

//creo el objeto dom
ByteArrayInputStream is = new ByteArrayInputStream(base64DecodedResponse);

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder();

Document document = docBuilder.parse(is);
Element element = document.getDocumentElement();

UnmarshallerFactory unmarshallerFactory = Configuration.getUnmarshallerFactory();
Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(element);
//aqui me da el fallo no crea objeto porque me da nullPointerException
XMLObject responseXmlObj = unmarshaller.unmarshall(element);

Response response = (Response) responseXmlObj;

Reading the Assertion. This Response has only one Assertion
Assertion assertion = response.getAssertions().get(0);
//debería llegar aqui para obtener el NameID
String subject = assertion.getSubject().getNameID().getValue();
Reading the issuer (Issuer is the IDP who issued the Response object)
String issuer = assertion.getIssuer().getValue();

Muchas gracias por todo y cualquier aportación será bienvenida

Buen día a todos!!!!

Fernando.
thumbnail
8年前 に FERNANDO ROSERO によって更新されました。

RE: HOOK SAML2 LIFERAY

New Member 投稿: 2 参加年月日: 15/12/10 最新の投稿
Hola.

Ya me contesto solo, como los locos jajajaja.

Por si alguien le interesa la solución, resulta que tenía un problema de alineamiento de versiones de las librerias SAML, finalmente utilizo las librerías de la versión 2.6.5 pero además he tenido que agregar otras librerías que le faltaban, ya saben como todo "librería_que_falta .jar" a san google, descargarla y agregarla a la carpeta lib del hook.

Otra cosa importante es inicializar las librerías:
try {
DefaultBootstrap.bootstrap();
} catch (ConfigurationException e) {
e.printStackTrace();
}

En mi caso después de obtener en String el XML.

Un saludo

Y suerte a todos!!!!!