Archive

Archive for the ‘IAM’ Category

OpenSSO, OpenID and Yubikey, the perfect personal SSO: cheap, and secure

August 3rd, 2009

As a new owner of an yubikey, I was looking the best way to integrate it with the web application I already use. While there is already an available OpenID provider which support Yubikey authentication, I prefer to manage my own system, using OpenSSO for sure :)
Yubikey
First, let me introduce the yubikey. This USB key act as an OTP (One Time Password) device, each time you press the button, the key compute a new password. This pasword must be verify, in the case of Yubikey, this is done by query a Webservices on a yubico (the company) server. Yubikey offers a lot of advantages than others classical OTP devices, including:

  • The yubikey is see as an USB keyboard (class HID), no driver required!
  • No battery, more longlife than anothers devices
  • Very cheap, around 20 euros (ordered by 10, from France), transport and taxes included

So, why choose OpenSSO? For few years know, OpenSSO provides an extension to act as an OpenID provider, and an authentication class is available for the Yubikey.

OpenSSO OpenID Yubikey

References:

IAM, Security, Sysadmin , ,

IAM track at LSM

May 4th, 2009

As a member of the LSM staff, I organize a track about IAM. The schedule is almost closed, including:

  • Pat Patterson, from OpenSSO, the famous Access Manager (SSO) of Identity Federation tool from Sun (english)
  • Ludovic Poitou, from OpenDS, the future Sun’s Directory Server (english or french)
  • Clément Oudot, from LemonLDAP::NG, an opensource Web SSO (english or french
  • Tomas Gustavsson, from EJBCA, the most famous opensource PKI product (english)
  • Jonathan Clarke, from LSC, a tool to synchronize directory from JDBC or LDAP (english or french)
  • Myself, introducing about IAM, especially the provisionning (french)

This day is planned for July, the 10th, at Nantes. Check LSM website to register in a near future (registration are not opened yet). For OpenDS, LemonLDAP::NG and LSC talks, the language will be choosen according the audience.

IAM, PKI, SSO, Social, Sysadmin

Petite surprise en LDAP: last successful bind

April 28th, 2009

Un rapide poste qui je l’espère fera suite à d’autres pour exposer une petite surprise que j’ai eu avec LDAP (enfin de manière plus précises avec les serveurs). Lors d’un projet pour mon nouvel employeur, on me demanda d’installer un OpenSSO pour authentifier des utilisateurs et obtenir leurs attributs LDAP. Bon, jusqu’ici rien d’anormal. Néanmoins, dans les attributs utilisateurs, il est demandé un attribut fournissant la date de la dernière connexion d’un utilisateur (en pratique la date d’un dernier bind opéré avec succès). Sur le moment, je n’ai pas percuté. Ce n’est qu’au moment de revenir sur mon poste, et par acquis de conscience, que j’ai commencé à me renseigner.

Et quelle ne fut pas ma surprise lorsque je me suis rendu que :

  • OpenSSO ne le permet pas de base. Après une rapide rechercher, il semblerait qu’une manière simple (c’est tout relatif) est d’écrire une classe (Java) qui sera exécutée après une authentification utilisateur.
  • Active Directory semble fournir cette fonctionnalité de base (via l’attribut lastlogon)
  • Sun Directory Directory Server Entreprise Edition (DSEE pour faire court) ne semble à priori pas le supporter dans toutes ses versions (>= 6.2 de mémoire, à prendre avec grande précaution) (tests en court)
  • OpenDS le supporte (tests en court)
  • Sun iPlanet 5.x ne le supporte tout simplement pas
  • Je n’ai pas regardé pour les autres serveurs, si jamais vous avez des retours dessus, je suis preneur.

Évidemment, je vous laisse deviner quel serveur j’utilise. Donc, je me suis retrouvé à écrire un plugin (en C) pour iPlanet, j’avoue que cela est assez intéressant (enfin il y a bien pire comme tâche :) . Je vais mettre à disposition le code de ce plugin d’ici quelques jours, même si je doute qu’en Avril 2009 cela intéresse encore beaucoup de gens !

Pour information, pour obtenir cette fonctionnalité avec DSEE et OpenDS, il faut utiliser les password policies, et n’activer que la partie concernée. Cela va mettre à jour le champ ds-pwp-last-login-time (au moins vrai pour OpenDS).

Néannmoins, j’avoue que je suis assez surpris que cela ne soit pas de base, partout, dans tous les serveurs LDAP. Certes, cela demande un minimum de performances supplémentaires. En effet, cela provoque une écriture (opération considérée comme lente sur un annuaire LDAP) à chaque opération d’authentification réussie (mais on pourrait imaginer de vouloir l’équivalent pour un last failure). Mais au point de vue gestion d’identité, c’est quand même une information qui peut être très intéressante. Au hasard, sur un portail public, d’obtenir rapidement, et simplement, la liste des utilisateurs qui ne se sont pas connectés depuis une année.

IAM, Security, Sysadmin ,

Article sur la mise en place de l’authentification X509 avec OpenSSO et EJBCA

April 3rd, 2009

Suite à mon article et la création d’une imageVMWare pour démontrer l’utilisation d’EJBCA et d’OpenSSO pour faire de l’authentification X509 client, Pat ma gentiment demandé si je pouvais écrire un article à ce sujet. Et c’est maintenant chose faite, l’article est disponible ici. En route pour la deuxième partie !

IAM, PKI, SSO, Security ,

Ça bouge chez Sun !

March 15th, 2009

Malgré une santé économique plus ou moins bonne, des licenciements, (mais a contrario une bonne publicité) ça bouge beaucoup chez Sun, notamment dans le domaine de l’IAM. Pour preuve, il suffit de regarder l’activité autour d’OpenSSO, et de WebSpaces

OpenSSO

Pour OpenSSO, comme le montre la roadmap, il y a des choses fort intéressantes en prévision. Comme par exemple un mandataire inverse (reverse proxy) avec la possibilité de gérer des accréditations secondaires. En pratique, cela permet de protéger une application où il est impossible d’installer un agent, et qui ne supporte pas SAMLv2. De manière concrête, cela se traduit par de l’injection de formulaires (fillform) du login/mot de passe de l’utilisateur. La solution d’un mandataire inverse permet de rendre plus faible (et surtout plus quantifiable avant vente) les coûts d’intégration d’une application dans un SSO.

D’autres points notables concernant OpenSSO résident dans l’avancé du support d’OpenDS (avec reset du mot de passe), et la création d’une fedlet en .Net.

WebSpaces

Je n’ai encore pris longtemps pour faire un billet sur WebSpace, mais je tacher de résumer de manière rapide. Glassfish WebSpace est le fruit du partenariat entre Sun et Liferay, avec pour objectif de créer une nouvelle version de Sun Portal Server (ce qui d’ailleurs, ne fais pas que des heureux parmi les clients actuels, à juste titre). WebSpace est fourni avec un certain nombre de porlet existantes, dont certaines orientées enterprise. Je m’intèresse particulièrement à la porlet Workflow, qui permet de créer des petits processus (workflows) simples, comme par exemple la gestion des notes de frais (c’est l’exemple fourni). Pour ma part, j’ai comme objectif de créer une porlet de demande de congé (avec double approbation). J’en dirais plus dans un prochain billet !

IAM, SSO

An IRC channel about IAM

January 15th, 2009

Few days ago, I thought it was a pity there is no place to discuss about IAM. Well, ok, there are some places like Sun IDM’s forums, the #opensso channel, etc. however all this place are related to a specific product. For example I don’t think the Sun IDM’s forum is a good place to ask question about pros and cons of Sun IDM vs Novell IDM :) Well, you can, but there is a big chance that all answers leads you on Sun IDM ! :)

So, as you probably ever guessed, I create an IRC channel, so you can join us (there are already some very interesting people!) on the freenode network (irc.freenode.net), on the channel ##iam, note the double # is not a typo.

Hope to see you on the channel!

IAM, Social

Configurer la servlet SPML2 dans IDM

September 20th, 2008

Dans un précédent message, j’ai exposé rapidement ce que c’était SPML. Je vous propose maintenant de découvrir comment l’activer dans Sun Identity Manager, qui comme son nom l’indique, est un outil de gestion d’identité (IAM donc). La méthode présenté est normalement valable aussi bien pour les versions 7 et 8 d’IDM.

Créer un fichier XML (depuis votre poste de travail) avec le contenu suivant :

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
<Waveset>
   <ImportCommand  name='include' file='sample/spml2.xml'/>
</Waveset>

Puis connecter vous sur l’interface d’administration d’IDM (en configurator), puis cliquer sur le menu Configure, puis Import Exchange File. Choisissez le fichier préalablement créer, puis valider. Si tout se passe correctement, vous devriez normalement obtenir un message équivalent à cette illustration.

Vous pouvez désormais envoyer vos requêtes SPML (via un transport SOAP) à l’url /idm/servlet/openspml2.

IAM

IDM, EJBCA, SPML, et Groovy, ca y est !

August 26th, 2008

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 !

IAM, PKI ,

Présentation (rapide) de SPML

August 11th, 2008

Et oui, encore un sigle (barbare ?) en *ML. Pour commencer, sa définition : Simple Provisioning Markup Language, plus concrètement il s’agit d’un standard OASIS basé sur XML décrivant des opérations d’approvisionnement (provisionning) comme son nom l’indique. En pratique, il est surtout très utilisé pour la gestion des identités, entre différents produits plus ou moins pas ouvert. Même si ce standard n’est (malheureusement) pas trop utilisé, ou du moins ses utilisations restent discrètes, il reste un des rares (seul à ma connaissance) standards pouvant traduire le cycle de vie d’une identité (création, modification, suppression, et également recherche), et avec une grande souplesse. Pour commencer, attardons nous sur les différentes opérations décrites par le schéma SPML :

  • addRequest (création d’une entité)
  • lookupRequest (recherche d’une entité à partir de son identifiant unique)
  • modifyRequest (modification d’une entité)
  • deleteRequest (suppression d’une entité)
  • searchRequest (recherche d’une entité à partir d’un attribut)

Remarquer que je parle bien d’entité, en effet, SPML ne décris pas de manière forte le contenu des opérations, on peut donc l’utiliser par exemple pour des identités, mais tout autre chose.

L’ensemble des opérations peuvent être appelées aussi bien dans un mode synchrone qu’en mode asynchrone (chaque requête doit être alors identifiée de manière unique par le client). Bref, assez de blablah, voici un exemple très simple (le plus simple en fait) de requête SPML :

<lookupRequest requestID='125'>
<psoID ID='asyd' />
</lookupRequest>

Je crois que cela se passe de commentaire, je fais une recherche en utilisant l’identifiant unique (ici de mon compte asyd, sur un Sun Identity Manager). Si IDM est bien configuré pour accepter les requêtes SPML (je ferais un petit post dans un avenir proche à ce sujet), le retour aura la forme suivante :

pour des raisons de lisibilité (merci wordpress) la réponse se trouve en pièce jointe

Comme on le voit, les attributs réels de l’utilisateur sont fournis en contenu du tag data, et les connaisseurs aurons reconnus l’utilisation de l’espace de nommage DSML, qui – pour faire court – est une représentation XML d’une entrée LDAP. Bref, pour ceux qui n’auraient pas suivis (en même temps ce n’est pas évident), le schéma SPML ne s’occupe pas de la représentation de l’attribut SPML data, comme le montre le schéma core.

En fait, seul l’attribut psoID (où PSO signifie Provisioning Service Objects) est défini par le schéma SPML, le reste n’étant lié qu’à la définition des opérations. Il permet de déterminer de manière unique une entité (dans notre cas une identité, donc l’accountId au niveau d’IDM).

Pour résumer : SPML est un standard OASIS (sous forme d’un schéma XML) d’approvisionnement, surtout utilisé pour la gestion d’identité, afin de faire communiquer entre elle différentes couches logiciels (brique métier de gestion d’identité, une PKI, etc.). Tout ceci en décrivant des opérations, mais en laissant à chacun le soin de représenter ses données. Cela à l’avantage d’être très souple, mais il reste donc la problématique du contenu (charge utile) à traiter, sauf si on l’utilise un autre standard, comme le DSML, dans le cas d’une gestion d’identité.

Voilà, à plus tard pour des nouvelles aventures dans le monde merveilleux (ou pas) de SPML.

IAM

Création d’un formulaire IDM8

July 29th, 2008

Pff, après OpenSSO, j’ai enfin réussi à avancer sur IDM8 (décidément c’est une bonne période ;p), en effet j’ai réussi à créer et utiliser (surtout utiliser, en fait, sinon c’est moins intéressant) un formulaire de création d’utilisateur dans IDM8. Donc, comme d’habitude, quand on dispose de la procédure qui va bien, et d’un exemple, c’est tout de suite beaucoup plus simple : (la procédure nécessite néanmoins un IDM fonctionnel)

  • télécharger et installer Netbeans 6
  • télécharger et installer le plugin identity manager pour Netbeans 6
  • créer un nouveau projet IDM de type remote, puis remplir le formulaire
  • dans le répertoire Custom Identity Manager Objects, faire un click droit pour créer un nouveau fichier de type Form
  • utiliser le fichier attaché en tant qu’exemple, modifier la valeur du champ organisation (ou supprimer complètement ce champ)
  • click droit sur le nom du fichier, puis menu IDM pour finalement Upload object(s), cette opération va créer le formulaire dans le référentiel IDM
  • connecter vous en tant que configurator, puis créer un nouvel utilisateur disposant du droit create user
  • éditer cette utilisateur, puis dans l’onglet Security de cet utilisateur, assigner le nouveau formulaire (UserTemplateTab) pour le champ User Form
  • connecter vous en tant que cet administrateur, vous devriez normalement utiliser le formulaire pour créer votre utilisateur !
Quelques liens utiles :

IAM