C’est possible. Par défaut hps prend sa configuration à l’intérieur d’un de ces jars, mais si l’équivalent est présent dans /etc/bm-hps, il utilise ça en priorité.
Pour ça il faut recopier depuis notre git les fichiers plugins/net.bluemind.proxy.http/config/* dans /etc/bm-hps/
Vous devriez avoir une arborescence qui ressemble à ça :
root@bm1:~# find /etc/bm-hps/
/etc/bm-hps/
/etc/bm-hps/bm_sso.xml
/etc/bm-hps/forwards
/etc/bm-hps/forwards/cal.xml
/etc/bm-hps/forwards/settings.xml
/etc/bm-hps/forwards/titi.xml
/etc/bm-hps/forwards/ac.xml
/etc/bm-hps/forwards/root.xml
/etc/bm-hps/forwards/contact.xml
/etc/bm-hps/forwards/roundcube.xml
/etc/bm-hps/forwards/setup.xml
/etc/bm-hps/forwards/templates.xml
Je modifie le fichier bm_sso.xml pour remplacer config/forwards par forwards (le chemin dans le jar est un peu différent de celui sur disque).
Ensuite je me crée un fichier forwards/titi.xml pour ma nouvelle application, un petit moteur de recherche :
<?xml version="1.0" encoding="utf-8"?>
<forwards>
<forward path="/titi" target="http://www.google.com">
<auth kind="BLUEMIND_CORE" />
<whitelist>
<wl uri="/appcache.jsp"/>
</whitelist>
</forward>
</forwards>
Je modifie la conf de nginx pour lui dire que /titi est proxyfié et protégé par hps :
location /titi/ {
proxy_pass http://127.0.0.1:8079/titi/;
}
Je restart hps et nginx et je me rend sur https://<mon_url>/titi/
J’ai bien la page de login BM. Je m’authentifie et j’obtiens une réponse de google :
400. That’s an error.
Your client has issued a malformed or illegal request. That’s all we know.
Mais mon url est bien https://<mon_url>/titi/bluemind_sso_security
Tout ça parce que google n’a pas adapté son application pour accepter les headers HTTP de hps, une honte !
Côté applicatif, l’application reçoit toute une série de headers http, dont BMUserLogin avec le login@mondoma.ine et BMSessionId un token de session utilisable entre autre comme mot de passe imap et mot de passe bluemind core pour toute la durée de la session.
Voir BMCAuthProvider#decorate() pour la liste exhaustive des headers transmis par HPS.
Voir HPSFilter pour un exemple de filtre J2EE qui traite ces headers et les ré-injecte dans nos JSP d’accueil dans une variable json pour que nos javascript puissent s’en servir.
Pour le single sign out, un simple lien vers une url finissant par /bluemind_sso_logout est intercepté par notre filtre (HPSFilter). Il met fin à la session sur blue mind core, en profite pour invalider la session de l’appli courante puis redirige vers /. Le serveur de MQ notifie hps que la session est invalide et refuse alors l’accès aux autres applications.