IDM, EJBCA, SPML, et Groovy, ca y est !
J’en rêvais, alors je l’ai fais ! Mon idée était de disposer d’un ensemble d’outils pour générer facilement des requêtes SPML, j’ai donc créer une petite bibliothèque Java, et écris quelques scripts groovy associés, en pratique cela donne :
import net.asyd.iam.spml.AddRequest AddRequest request = new AddRequest() request.init("http://localhost:8080/SPMLServer/openspml2") request.createPsoId("easyspmlDemo") request.addAttribute("emailAddress", "bbonfils@gmail.com") request.proceed() request.dumpResponse()
Comme vous pouvez le constater, cela deviens très simple. De plus, dans ma lancé, je me suis dis pourquoi ne pas créer une servlet recevant des requêtes SPML pour les traduires dans des WebServices EJBCA. C’est maintenant chose faite. Bien que je n’implémente actuellement que la méthode addRequest, cela me permet de provisionner des entités depuis un producteur SPML, comme par exemple Sun Identity Manager. La “traduction” entre SPML et la couche EJBCA se fais au travers d’un script groovy (et oui, encore du groovy, groovy c’est le bien !), de la manière suivante :
import java.util.HashMap import net.asyd.iam.FinalAddEntity import org.ejbca.core.protocol.ws.UserDataVOWS public class FinalAddEntitySample implements FinalAddEntity { def id def attributes def buffer def ejbcaEntity public void init(String id, HashMap attributes, UserDataVOWS ejbcaEntity) { this.id = id this.attributes = attributes this.ejbcaEntity = ejbcaEntity } public void preprocess() { buffer = ",UID=" + id + ",OU=staff,O=asyd dot net,C=FR" } public String getSubjectDN() { return "CN=" + id + buffer } public boolean proceed() { ejbcaEntity.setUsername(id) ejbcaEntity.setEmail(attributes.get("emailAddress")) ejbcaEntity.setSubjectDN(getSubjectDN()) ejbcaEntity.setCaName("DemoCA") ejbcaEntity.setCertificateProfileName("ENDUSER") ejbcaEntity.setEndEntityProfileName("EE_SPML_USER") ejbcaEntity.setTokenType("P12") ejbcaEntity.setSendNotification(true) return true } }
Plus d’information disponible sur devel.asyd.net :
Actuellement le code est plutôt un POC que production ready, mais avec un peu de chance cela ne saurait tarder, et après tout ca permet déjà de faire des choses sympas !