viernes, 12 de diciembre de 2008

SDK del Access Manager con Policy Agents

Ayer dediqué parte de mi día a instalar el Policy Agent para Tomcat 5.5 del Access Manager. Dado que no encontré una documentación más o menos suficiente, pero sí muchas dudas y bugs en los foros (qué raro), comparto con ustedes algunas cosas a considerar.

Para todo fin de pruebas tenía que hacer algo que ya había hecho con el portal: sacar el grupo de un usuario y pasarlo como parámetro de rol a un Web Service. Lo primero desde luego fue instalar el Policy Agent. Hasta ahí todo iba chido, la instalación fue bastante sencilla y pude seguir paso a paso el PDF de documentación sin ningún problema.

Pero cuando intenté levantar mi Tomcat me dijo que nomás no, por una ClassNotFoundException en el BaseModelMBean de la Commons Modeler ( la org.apache.commons.modeler.BaseModelMBean para ser exactos ). Entonces me di cuenta de algo: en la instalación, el Policy Agent modifica el classpath del Tomcat, pero no lo hace bien. Así que hay que echarle un ojo al archivo que se crea en $CATALINA_HOME/bin/setAgentclasspath.sh . La intención es buena pero se hace mal, ya que los nombres de los JAR al parecer están hardcodeados y no siempre coinciden con lo que se tiene realmente. Así que cambié el commons-modeler.jar -que no existe- por commons-modeler-2.0.1.jar que es el equivalente en mi Tomcat.

Dicho de manera condensada: verifica que el setAgentclasspath.sh apunte a archivos que existan.

Hice lo mismo con otros cuantos jars y el Tomcat levantó todo bonito. Entonces en la webapp ROOT, para fines de pruebas, cree la jsp index2.jsp y me puse a jugar un rato. Hasta antes, lo que hacía para obtener el SSOToken era:

SSOToken tkn = SSOTokenManager.getInstance().createSSOToken(request);


Y de ahí me seguía con el AMStoreConnection, sacaba el AMUser, y los Static Group DNs. Pero en cuanto quería crear el Token desde el Manager con el método que recibe el request, me decía que no. Particularmente el error era Service URL not found:session .

Tras geekear como idiota y ver que el request tenía broncas -supongo que originadas porque el access manager estaba en el mismo host que el tomcat o por permisos- encontré otra manera que de hecho es más recomendable. Para obtener el TokenId usamos:

IAmSSOCache iasc = AmFilterManager.getAmSSOCache();
String sstk = iasc.getSSOTokenForUser(request);


Y para tener el objeto completo se aplica:

SSOToken token = SSOTokenManager.getInstance().createSSOToken(sstk);

Con este pequeño workaround ya se puede hacer el resto del teatrito. Esto es para pasar primero por la autorización del filtro Java que da la funcionalidad de Single Sign On.

De nuevo, va condensado: no uses el Token Manager con el request, hay que usar el SSOCache y obtener el token mediante él.

Espero que esto le sirva a alguien, cualquier duda por favor dejen un comentario.

Saludos,

Posts relacionados