<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>asyd's blog &#187; IAM</title>
	<atom:link href="http://blog.asyd.net/category/security/iam/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.asyd.net</link>
	<description>unix forever, for everyone. Not convinced, try Mac OS X!</description>
	<lastBuildDate>Wed, 21 Jul 2010 14:26:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>LSC Use Case: synchronize telephoneNumber from Sun LDAP to Active Directory</title>
		<link>http://blog.asyd.net/2010/07/lsc-use-case-synchronize-telephonenumber-from-sun-ldap-to-active-directory/</link>
		<comments>http://blog.asyd.net/2010/07/lsc-use-case-synchronize-telephonenumber-from-sun-ldap-to-active-directory/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 14:26:42 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[lsc]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=449</guid>
		<description><![CDATA[At work, we are using two directories. The first one, a damn old Sun Directory 5.2, used by the mail system and VOIP. The second directory is an Active Directory used by &#8230; everything which run on Windows. At the moment, we don&#8217;t have some Identity Provisionning products, so users are created by hand in [...]]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://www.rtl.fr/">work</a>, we are using two directories. The first one, a damn old Sun Directory 5.2, used by the mail system and VOIP. The second directory is an Active Directory used by &#8230; everything which run on Windows. At the moment, we don&#8217;t have some Identity Provisionning products, so users are created by hand in both directories. I want to make this synchronization automatic, however since it&#8217;s a complex and dangerous thing, I want to start by synchronize few attributes. The first one is the telephoneNumber, available in the Sun Directory with format &#8220;21xxx&#8221; (the internal phone number), while the one store in active directory is the public one (014070xxx), so I need to transform the attribute before sending it in AD.</p>
<p>Some friends of mine start the <a href="http://www.lsc-project.org">LSC Project</a>(LDAP Synchronization Connector) few years ago, a tool to synchronize directories! Here the configuration file I used for my use case:</p>
<h2>Define the source</h2>
<p><code><br />
src.java.naming.provider.url = ldap://sun_hostname:389/dc=rtl,dc=fr<br />
src.java.naming.security.authentication = none<br />
src.java.naming.security.principal =<br />
src.java.naming.security.credentials =<br />
src.java.naming.referral = ignore<br />
src.java.naming.ldap.derefAliases = never<br />
src.java.naming.factory.initial = com.sun.jndi.ldap.LdapCtxFactory<br />
src.java.naming.ldap.version = 3<br />
</code></p>
<h2>Define the target</h2>
<p><code><br />
dst.java.naming.provider.url = ldap://ad_hostname:389/dc=activedirectory,dc=domain<br />
dst.java.naming.security.authentication = simple<br />
dst.java.naming.security.principal = userwithenoughperms@activedirectory.domain<br />
dst.java.naming.security.credentials = secret<br />
dst.java.naming.referral = ignore<br />
dst.java.naming.ldap.derefAliases = never<br />
dst.java.naming.factory.initial = com.sun.jndi.ldap.LdapCtxFactory<br />
dst.java.naming.ldap.version = 3<br />
</code></p>
<h2>Define the task to manage telephoneNumber attribute</h2>
<p><code><br />
lsc.tasks = FirstTask<br />
lsc.tasks.FirstTask.srcService = org.lsc.jndi.SimpleJndiSrcService<br />
lsc.tasks.FirstTask.srcService.baseDn = ou=People<br />
lsc.tasks.FirstTask.srcService.filterAll = (inetUserStatus=ACTIVE)<br />
lsc.tasks.FirstTask.srcService.pivotAttrs = mail<br />
lsc.tasks.FirstTask.srcService.filterId = (mail={mail})<br />
lsc.tasks.FirstTask.srcService.attrs = mail telephoneNumber<br />
lsc.tasks.FirstTask.srcService.requestNameForList = getAllPeoplePivots<br />
lsc.tasks.FirstTask.srcService.requestNameForObject = getOnePerson<br />
lsc.tasks.FirstTask.dstService = org.lsc.jndi.SimpleJndiDstService<br />
lsc.tasks.FirstTask.dstService.baseDn = ou=Pole radio,dc=activedirectory,dc=domain<br />
lsc.tasks.FirstTask.dstService.filterAll = (&#038;(sn=*)(objectClass=inetOrgPerson))<br />
lsc.tasks.FirstTask.dstService.pivotAttrs = mail<br />
lsc.tasks.FirstTask.dstService.filterId = (mail={mail})<br />
lsc.tasks.FirstTask.dstService.attrs = telephoneNumber<br />
lsc.tasks.FirstTask.bean = org.lsc.beans.SimpleBean<br />
lsc.tasks.FirstTask.dn = ""<br />
lsc.syncoptions.FirstTask = org.lsc.beans.syncoptions.PropertiesBasedSyncOptions<br />
lsc.syncoptions.FirstTask.default.action = K<br />
lsc.syncoptions.FirstTask.default.delimiter = $<br />
lsc.syncoptions.FirstTask.telephoneNumber.action = F<br />
lsc.syncoptions.FirstTask.telephoneNumber.force_value = StringUtils.replaceFromMap(srcBean.getAttributeValueById("telephoneNumber"), "telephone.csv")<br />
</code></p>
<p>I think most of properties are self-meaning, however here some explanations about few of thems</p>
<ul>
<li><em>default.action =  K</em>, meaning the attribute is not overriden if the value is ok </li>
<li><em>telephoneNumber.action = F</em>, force the attribute to be updated</li>
<li><em>lsc.syncoptions.FirstTask.telephoneNumber.force_value= StringUtils.replaceFromMap(srcBean.getAttributeValueById(&#8220;telephoneNumber&#8221;), &#8220;telephone.csv&#8221;)</em> is the code to compute the new value of the telephoneNumber attribute. In that case, I use a CSV files where I specify two fields: the pattern, and the value to replace if the pattern is found. (i.e. &#8220;^21,014070&#8243;)</ul>
</ul>
<h2>Output in dryrun mode</h2>
<p><code><br />
% ./bin/lsc -n -f etc -s FirstTask<br />
juil. 21 16:24:43 - WARN  - Starting sync for FirstTask<br />
juil. 21 16:24:43 - INFO  - Connecting to LDAP server ldap://sun_hostname:389/dc=rtl,dc=fr anonymously<br />
juil. 21 16:24:44 - INFO  - Connecting to LDAP server ldap://ad_hostname:389/dc=activedirectory,dc=domain as admin@activedirectory.domain<br />
juil. 21 16:24:44 - WARN  - The method getAttributeValueById() is deprecated and will be removed in a future version of LSC. Please use getAttributeFirstValueById() instead.<br />
juil. 21 16:24:44 - DEBUG - Update condition false. Should have modified object CN=BONFILS Bruno,OU=Users,DC=activedirectory,DC=DOMAIN<br />
dn:: CN=BONFILS Bruno,OU=Users,DC=activedirectory,DC=DOMAIN<br />
changetype: modify<br />
replace: telephoneNumber<br />
telephoneNumber: 0140704049</p>
<p>juil. 21 16:24:44 - INFO  - All entries: 1, to modify entries: 0, modified entries: 0, errors: 0<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2010/07/lsc-use-case-synchronize-telephonenumber-from-sun-ldap-to-active-directory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenSSO, OpenID and Yubikey, the perfect personal SSO: cheap, and secure</title>
		<link>http://blog.asyd.net/2009/08/opensso-openid-and-yubikey-the-perfect-personal-sso-cheap-and-secure/</link>
		<comments>http://blog.asyd.net/2009/08/opensso-openid-and-yubikey-the-perfect-personal-sso-cheap-and-secure/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 08:23:51 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[openid]]></category>
		<category><![CDATA[opensso]]></category>
		<category><![CDATA[yubikey]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=360</guid>
		<description><![CDATA[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 First, let me introduce the yubikey. This USB key [...]]]></description>
			<content:encoded><![CDATA[<p>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 <img src='http://blog.asyd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<img src="http://blog.asyd.net/wp-content/uploads/2009/08/Image-2.png" alt="Yubikey" title="Yubikey" width="110" height="78" class="alignright size-full wp-image-375" /><br />
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:</p>
<ul>
<li>The yubikey is see as an USB keyboard (class HID), <b>no driver required!</b></li>
<li>No battery, more longlife than anothers devices</li>
<li>Very cheap, around 20 euros (ordered by 10, from France), transport and taxes included</li>
</ul>
<p>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. </p>
<p><img src="http://blog.asyd.net/wp-content/uploads/2009/08/OpenSSO-OpenID-Yubikey.png" alt="OpenSSO OpenID Yubikey" title="OpenSSO OpenID Yubikey" width="515" height="394" class="aligncenter size-full wp-image-370" /></p>
<p>References:</p>
<ul>
<li><a href="http://blogs.sun.com/steffo/entry/opensso_with_openid_on_the">Build the OpenSSO extension for OpenID</a></li>
<li><a href="https://opensso.dev.java.net/source/browse/opensso/extensions/authnyubikey/README.txt?rev=1.3&#038;view=markup">Build the Yubikey authentication class</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2009/08/opensso-openid-and-yubikey-the-perfect-personal-sso-cheap-and-secure/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IAM track at LSM</title>
		<link>http://blog.asyd.net/2009/05/iam-track-at-lsm/</link>
		<comments>http://blog.asyd.net/2009/05/iam-track-at-lsm/#comments</comments>
		<pubDate>Mon, 04 May 2009 07:38:44 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[PKI]]></category>
		<category><![CDATA[SSO]]></category>
		<category><![CDATA[Social]]></category>
		<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=289</guid>
		<description><![CDATA[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&#8217;s Directory Server (english or french) Clément Oudot, from LemonLDAP::NG, an opensource Web SSO [...]]]></description>
			<content:encoded><![CDATA[<p>As a member of the <a href="http://2009.rmll.info/?lang=en">LSM</a> staff, I organize a track about IAM. The schedule is almost closed, including:</p>
<ul>
<li> Pat Patterson, from <a href="http://opensso.dev.java.net/">OpenSSO</a>, the famous Access Manager (SSO) of Identity Federation tool from Sun (english)</li>
<li> Ludovic Poitou, from <a href="http://opends.org/">OpenDS</a>, the future Sun&#8217;s Directory Server (english or french) </li>
<li> Clément Oudot, from <a href="http://wiki.lemonldap.ow2.org/xwiki/bin/view/NG/Presentation">LemonLDAP::NG</a>, an opensource Web SSO (english or french</li>
<li> Tomas Gustavsson, from <a href="http://www.ejbca.org/">EJBCA</a>, the most famous opensource PKI product (english) </li>
<li> Jonathan Clarke, from <a href="http://lsc-project.org/">LSC</a>, a tool to synchronize directory from JDBC or LDAP (english or french)</li>
<li> Myself, introducing about IAM, especially the provisionning (french)</li>
</ul>
<p>This day is planned for July, the 10th, at Nantes. Check <a href="http://2009.rmll.info"/>LSM website</a> 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.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2009/05/iam-track-at-lsm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Petite surprise en LDAP: last successful bind</title>
		<link>http://blog.asyd.net/2009/04/petite-surprise-en-ldap-last-successful-bind/</link>
		<comments>http://blog.asyd.net/2009/04/petite-surprise-en-ldap-last-successful-bind/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 18:07:24 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[opensso]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=277</guid>
		<description><![CDATA[Un rapide poste qui je l&#8217;espère fera suite à d&#8217;autres pour exposer une petite surprise que j&#8217;ai eu avec LDAP (enfin de manière plus précises avec les serveurs). Lors d&#8217;un projet pour mon nouvel employeur, on me demanda d&#8217;installer un OpenSSO pour authentifier des utilisateurs et obtenir leurs attributs LDAP. Bon, jusqu&#8217;ici rien d&#8217;anormal. Néanmoins, [...]]]></description>
			<content:encoded><![CDATA[<p>Un rapide poste qui je l&#8217;espère fera suite à d&#8217;autres pour exposer une petite surprise que j&#8217;ai eu avec LDAP (enfin de manière plus précises avec les serveurs). Lors d&#8217;un projet pour mon nouvel employeur, on me demanda d&#8217;installer un OpenSSO pour authentifier des utilisateurs et obtenir leurs attributs LDAP. Bon, jusqu&#8217;ici rien d&#8217;anormal. Néanmoins, dans les attributs utilisateurs, il est demandé un attribut fournissant la date de la dernière connexion d&#8217;un utilisateur (en pratique la date d&#8217;un dernier bind opéré avec succès). Sur le moment, je n&#8217;ai pas percuté. Ce n&#8217;est qu&#8217;au moment de revenir sur mon poste, et par acquis de conscience, que j&#8217;ai commencé à me renseigner.</p>
<p>Et quelle ne fut pas ma surprise lorsque je me suis rendu que :</p>
<ul>
<li>OpenSSO ne le permet pas de base. Après une rapide rechercher, il semblerait qu&#8217;une manière simple (c&#8217;est tout relatif) est d&#8217;écrire une classe (Java) qui sera exécutée après une authentification utilisateur.</li>
<li>Active Directory semble fournir cette fonctionnalité de base (via l&#8217;attribut lastlogon)</li>
<li>Sun Directory Directory Server Entreprise Edition (DSEE pour faire court) ne semble à priori pas le supporter dans toutes ses versions (&gt;= 6.2 de mémoire, à prendre avec grande précaution) (tests en court)</li>
<li>OpenDS le supporte (tests en court)</li>
<li>Sun iPlanet 5.x ne le supporte tout simplement pas</li>
<li>Je n&#8217;ai pas regardé pour les autres serveurs, si jamais vous avez des retours dessus, je suis preneur.</li>
</ul>
<p>Évidemment, je vous laisse deviner quel serveur j&#8217;utilise. Donc, je me suis retrouvé à écrire un plugin (en C) pour iPlanet, j&#8217;avoue que cela est assez intéressant (enfin il y a bien pire comme tâche <img src='http://blog.asyd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Je vais mettre à disposition le code de ce plugin d&#8217;ici quelques jours, même si je doute qu&#8217;en Avril 2009 cela intéresse encore beaucoup de gens !</p>
<p>Pour information, pour obtenir cette fonctionnalité avec DSEE et OpenDS, il faut utiliser les password policies, et n&#8217;activer que la partie concernée. Cela va mettre à jour le champ <tt>ds-pwp-last-login-time<em> </em>(au moins vrai pour OpenDS).</tt></p>
<p>Néannmoins, j&#8217;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&#8217;authentification réussie (mais on pourrait imaginer de vouloir l&#8217;équivalent pour un last failure). Mais au point de vue gestion d&#8217;identité, c&#8217;est quand même une information qui peut être très intéressante. Au hasard, sur un portail public, d&#8217;obtenir rapidement, et simplement, la liste des utilisateurs qui ne se sont pas connectés depuis une année.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2009/04/petite-surprise-en-ldap-last-successful-bind/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Article sur la mise en place de l&#8217;authentification X509 avec OpenSSO et EJBCA</title>
		<link>http://blog.asyd.net/2009/04/article-sur-la-mise-en-place-de-lauthentification-x509-avec-opensso-et-ejbca/</link>
		<comments>http://blog.asyd.net/2009/04/article-sur-la-mise-en-place-de-lauthentification-x509-avec-opensso-et-ejbca/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 15:21:41 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[PKI]]></category>
		<category><![CDATA[SSO]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[ejbca]]></category>
		<category><![CDATA[opensso]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=275</guid>
		<description><![CDATA[Suite à mon article et la création d&#8217;une imageVMWare pour démontrer l&#8217;utilisation d&#8217;EJBCA et d&#8217;OpenSSO pour faire de l&#8217;authentification X509 client, Pat ma gentiment demandé si je pouvais écrire un article à ce sujet. Et c&#8217;est maintenant chose faite, l&#8217;article est disponible ici. En route pour la deuxième partie !]]></description>
			<content:encoded><![CDATA[<p>Suite à mon article et la création d&#8217;une imageVMWare pour démontrer l&#8217;utilisation d&#8217;EJBCA et d&#8217;OpenSSO pour faire de l&#8217;authentification X509 client, Pat ma gentiment demandé si je pouvais écrire un article à ce sujet. Et c&#8217;est maintenant chose faite, <a href="http://developers.sun.com/identity/reference/techart/opensso_protect.html">l&#8217;article est disponible ici.</a> En route pour la deuxième partie !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2009/04/article-sur-la-mise-en-place-de-lauthentification-x509-avec-opensso-et-ejbca/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ça bouge chez Sun !</title>
		<link>http://blog.asyd.net/2009/03/ca-bouge-chez-sun/</link>
		<comments>http://blog.asyd.net/2009/03/ca-bouge-chez-sun/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 09:39:15 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[SSO]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=269</guid>
		<description><![CDATA[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&#8217;IAM. Pour preuve, il suffit de regarder l&#8217;activité autour d&#8217;OpenSSO, et de WebSpaces OpenSSO Tab Sweep, par Pat Petterson La roadmap d&#8217;OpenSSO Site principal de WebSpace et son wiki [...]]]></description>
			<content:encoded><![CDATA[<p>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&#8217;IAM. Pour preuve, il suffit de regarder l&#8217;activité autour d&#8217;OpenSSO, et de WebSpaces</p>
<ul>
<li><a href="http://blogs.sun.com/superpat/entry/opensso_tab_sweep_mar_13">OpenSSO Tab Sweep</a>, par Pat Petterson</li>
<li><a href="http://wikis.sun.com/display/OpenSSO/Schedule">La roadmap d&#8217;OpenSSO</a></li>
<li><a href="http://webspace.dev.java.net/">Site principal de WebSpace</a> et <a href="http://wikis.sun.com/display/WebSpaceServer10/Home">son wiki</a></li>
</ul>
<p><strong>OpenSSO</strong></p>
<p>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&#8217;installer un agent, et qui ne supporte pas SAMLv2. De manière concrête, cela se traduit par de l&#8217;injection de formulaires (fillform) du login/mot de passe de l&#8217;utilisateur. La solution d&#8217;un mandataire inverse permet de rendre plus faible (et surtout plus quantifiable avant vente) les coûts d&#8217;intégration d&#8217;une application dans un SSO.</p>
<p>D&#8217;autres points notables concernant OpenSSO résident dans l&#8217;avancé <a href="https://opensso.dev.java.net/issues/show_bug.cgi?id=3917">du support d&#8217;OpenDS</a> (avec reset du mot de passe), et la création d&#8217;une fedlet en .Net.</p>
<p><strong>WebSpaces</strong></p>
<p>Je n&#8217;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&#8217;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&#8217;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&#8217;est l&#8217;exemple fourni). Pour ma part, j&#8217;ai comme objectif de créer une porlet de demande de congé (avec double approbation). J&#8217;en dirais plus dans un prochain billet !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2009/03/ca-bouge-chez-sun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An IRC channel about IAM</title>
		<link>http://blog.asyd.net/2009/01/an-irc-channel-about-iam/</link>
		<comments>http://blog.asyd.net/2009/01/an-irc-channel-about-iam/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 18:46:08 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[Social]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=227</guid>
		<description><![CDATA[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&#8217;s forums, the #opensso channel, etc. however all this place are related to a specific product. For example I don&#8217;t think the Sun IDM&#8217;s forum is a good place to [...]]]></description>
			<content:encoded><![CDATA[<p>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&#8217;s forums, the #opensso channel, etc. however all this place are related to a specific product. For example I don&#8217;t think the Sun IDM&#8217;s forum is a good place to ask question about pros and cons of Sun IDM vs Novell IDM <img src='http://blog.asyd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Well, you can, but there is a big chance that all answers leads you on Sun IDM ! <img src='http://blog.asyd.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>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.</p>
<p>Hope to see you on the channel!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2009/01/an-irc-channel-about-iam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurer la servlet SPML2 dans IDM</title>
		<link>http://blog.asyd.net/2008/09/configurer-la-servlet-spml2-dans-idm/</link>
		<comments>http://blog.asyd.net/2008/09/configurer-la-servlet-spml2-dans-idm/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 07:15:44 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[spml]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=80</guid>
		<description><![CDATA[Dans un précédent message, j&#8217;ai exposé rapidement ce que c&#8217;était SPML. Je vous propose maintenant de découvrir comment l&#8217;activer dans Sun Identity Manager, qui comme son nom l&#8217;indique, est un outil de gestion d&#8217;identité (IAM donc). La méthode présenté est normalement valable aussi bien pour les versions 7 et 8 d&#8217;IDM. Créer un fichier XML [...]]]></description>
			<content:encoded><![CDATA[<p>Dans un précédent message, j&#8217;ai exposé rapidement ce que c&#8217;était SPML. Je vous propose maintenant de découvrir comment l&#8217;activer dans Sun Identity Manager, qui comme son nom l&#8217;indique, est un outil de gestion d&#8217;identité (IAM donc). La méthode présenté est normalement valable aussi bien pour les versions 7 et 8 d&#8217;IDM.</p>
<p>Créer un fichier XML (depuis votre poste de travail) avec le contenu suivant :</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">'1.0'</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">'UTF-8'</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Waveset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ImportCommand</span>  <span style="color: #000066;">name</span>=<span style="color: #ff0000;">'include'</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">'sample/spml2.xml'</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Waveset<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Puis connecter vous sur l&#8217;interface d&#8217;administration d&#8217;IDM (en configurator), puis cliquer sur le menu <em>Configure</em>, puis <em>Import Exchange File</em>. Choisissez le fichier préalablement créer, puis valider. Si tout se passe correctement, vous devriez normalement obtenir un message équivalent à cette illustration.</p>
<p>Vous pouvez désormais envoyer vos requêtes SPML (via un transport SOAP) à l&#8217;url <em>/idm/servlet/openspml2</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2008/09/configurer-la-servlet-spml2-dans-idm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDM, EJBCA, SPML, et Groovy, ca y est !</title>
		<link>http://blog.asyd.net/2008/08/idm-ejbca-spml-et-groovy-ca-y-est/</link>
		<comments>http://blog.asyd.net/2008/08/idm-ejbca-spml-et-groovy-ca-y-est/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 07:34:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[PKI]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[spml]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=47</guid>
		<description><![CDATA[J&#8217;en rêvais, alors je l&#8217;ai fais ! Mon idée était de disposer d&#8217;un ensemble d&#8217;outils pour générer facilement des requêtes SPML, j&#8217;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 &#160; AddRequest request = new AddRequest&#40;&#41; &#160; request.init&#40;&#34;http://localhost:8080/SPMLServer/openspml2&#34;&#41; request.createPsoId&#40;&#34;easyspmlDemo&#34;&#41; request.addAttribute&#40;&#34;emailAddress&#34;, &#34;bbonfils@gmail.com&#34;&#41; request.proceed&#40;&#41; request.dumpResponse&#40;&#41; Comme [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;en rêvais, alors je l&#8217;ai fais ! Mon idée était de disposer d&#8217;un ensemble d&#8217;outils pour générer facilement des requêtes SPML, j&#8217;ai donc créer une petite bibliothèque Java, et écris quelques scripts groovy associés, en pratique cela donne :</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">net.asyd.iam.spml.AddRequest</span>
&nbsp;
AddRequest request <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AddRequest<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
request.<span style="color: #006600;">init</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://localhost:8080/SPMLServer/openspml2&quot;</span><span style="color: #66cc66;">&#41;</span>
request.<span style="color: #006600;">createPsoId</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;easyspmlDemo&quot;</span><span style="color: #66cc66;">&#41;</span>
request.<span style="color: #006600;">addAttribute</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;emailAddress&quot;</span>, <span style="color: #ff0000;">&quot;bbonfils@gmail.com&quot;</span><span style="color: #66cc66;">&#41;</span>
request.<span style="color: #006600;">proceed</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
request.<span style="color: #006600;">dumpResponse</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>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&#8217;est maintenant chose faite. Bien que je n&#8217;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 &#8220;traduction&#8221; entre SPML et la couche EJBCA se fais au travers d&#8217;un script groovy (et oui, encore du groovy, groovy c&#8217;est le bien !), de la manière suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">java.util.HashMap</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">net.asyd.iam.FinalAddEntity</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #a1a100;">org.ejbca.core.protocol.ws.UserDataVOWS</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> FinalAddEntitySample <span style="color: #000000; font-weight: bold;">implements</span> FinalAddEntity <span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">def</span> id
    <span style="color: #000000; font-weight: bold;">def</span> attributes
    <span style="color: #000000; font-weight: bold;">def</span> buffer
    <span style="color: #000000; font-weight: bold;">def</span> ejbcaEntity
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> init<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">String</span> id, <span style="color: #aaaadd; font-weight: bold;">HashMap</span> attributes, UserDataVOWS ejbcaEntity<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006600;">id</span> <span style="color: #66cc66;">=</span> id
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006600;">attributes</span> <span style="color: #66cc66;">=</span> attributes
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006600;">ejbcaEntity</span> <span style="color: #66cc66;">=</span> ejbcaEntity
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> preprocess<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        buffer <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;,UID=&quot;</span> <span style="color: #66cc66;">+</span> id <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">&quot;,OU=staff,O=asyd dot net,C=FR&quot;</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #aaaadd; font-weight: bold;">String</span> getSubjectDN<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #ff0000;">&quot;CN=&quot;</span> <span style="color: #66cc66;">+</span> id <span style="color: #66cc66;">+</span> buffer
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">boolean</span> proceed<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        ejbcaEntity.<span style="color: #006600;">setUsername</span><span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span>
        ejbcaEntity.<span style="color: #006600;">setEmail</span><span style="color: #66cc66;">&#40;</span>attributes.<span style="color: #663399;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;emailAddress&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        ejbcaEntity.<span style="color: #006600;">setSubjectDN</span><span style="color: #66cc66;">&#40;</span>getSubjectDN<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
        ejbcaEntity.<span style="color: #006600;">setCaName</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;DemoCA&quot;</span><span style="color: #66cc66;">&#41;</span>
        ejbcaEntity.<span style="color: #006600;">setCertificateProfileName</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ENDUSER&quot;</span><span style="color: #66cc66;">&#41;</span>
        ejbcaEntity.<span style="color: #006600;">setEndEntityProfileName</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;EE_SPML_USER&quot;</span><span style="color: #66cc66;">&#41;</span>
        ejbcaEntity.<span style="color: #006600;">setTokenType</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;P12&quot;</span><span style="color: #66cc66;">&#41;</span>
        ejbcaEntity.<span style="color: #006600;">setSendNotification</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">true</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Plus d&#8217;information disponible sur devel.asyd.net :</p>
<ul>
<li><a href="http://devel.asyd.net/xwiki/bin/view/spmlTools/Start">Écrire des requêtes SPML en groovy avec EasySPML</a></li>
<li><a href="http://devel.asyd.net/xwiki/bin/view/spmlTools/servlet">Servlet SPML to EJBCA via groovy</a></li>
</ul>
<p>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 !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2008/08/idm-ejbca-spml-et-groovy-ca-y-est/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Présentation (rapide) de SPML</title>
		<link>http://blog.asyd.net/2008/08/presentation-rapide-de-spml/</link>
		<comments>http://blog.asyd.net/2008/08/presentation-rapide-de-spml/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 20:33:25 +0000</pubDate>
		<dc:creator>asyd</dc:creator>
				<category><![CDATA[IAM]]></category>
		<category><![CDATA[spml]]></category>

		<guid isPermaLink="false">http://blog.asyd.net/?p=39</guid>
		<description><![CDATA[Et oui, encore un sigle (barbare ?) en *ML. Pour commencer, sa définition : Simple Provisioning Markup Language, plus concrètement il s&#8217;agit d&#8217;un standard OASIS basé sur XML décrivant des opérations d&#8217;approvisionnement (provisionning) comme son nom l&#8217;indique. En pratique, il est surtout très utilisé pour la gestion des identités, entre différents produits plus ou moins pas ouvert. [...]]]></description>
			<content:encoded><![CDATA[<p>Et oui, encore un sigle (barbare ?) en *ML. Pour commencer, sa définition : <em>Simple Provisioning Markup Language</em>, plus concrètement il s&#8217;agit d&#8217;un <a href="http://www.oasis-open.org/committees/provision/" target="_blank">standard OASIS basé sur XML</a> décrivant des opérations d&#8217;approvisionnement (provisionning) comme son nom l&#8217;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&#8217;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&#8217;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 :</p>
<ul>
<li>addRequest (création d&#8217;une entité)</li>
<li>lookupRequest (recherche d&#8217;une entité à partir de son identifiant unique)</li>
<li>modifyRequest (modification d&#8217;une entité)</li>
<li>deleteRequest (suppression d&#8217;une entité)</li>
<li>searchRequest (recherche d&#8217;une entité à partir d&#8217;un attribut)</li>
</ul>
<p>Remarquer que je parle bien d&#8217;entité, en effet, SPML ne décris pas de manière forte le contenu des opérations, on peut donc l&#8217;utiliser par exemple pour des identités, mais tout autre chose.</p>
<p>L&#8217;ensemble des opérations peuvent être appelées aussi bien dans un mode synchrone qu&#8217;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 :</p>
<p><code>&lt;lookupRequest requestID='125'&gt;<br />
&lt;psoID ID='asyd' /&gt;<br />
&lt;/lookupRequest&gt;<br />
</code></p>
<p>Je crois que cela se passe de commentaire, je fais une recherche en utilisant l&#8217;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 :</p>
<p><em>pour des raisons de lisibilité (merci wordpress) la réponse se trouve en pièce jointe</em></p>
<ul>
<li><span style="text-decoration: underline; color: #551a8b;"><a href="http://blog.asyd.net/wp-content/uploads/2008/08/lookup-response.xml">lookup-response</a></span></li>
</ul>
<p>Comme on le voit, les attributs réels de l&#8217;utilisateur sont fournis en contenu du tag data, et les connaisseurs aurons reconnus l&#8217;utilisation de l&#8217;espace de nommage DSML, qui &#8211; pour faire court &#8211; est une représentation XML d&#8217;une entrée LDAP. Bref, pour ceux qui n&#8217;auraient pas suivis (en même temps ce n&#8217;est pas évident), le schéma SPML ne s&#8217;occupe pas de la représentation de l&#8217;attribut SPML data, comme le montre le schéma core.</p>
<p>En fait, seul l&#8217;attribut psoID (où PSO signifie Provisioning Service Objects) est défini par le schéma SPML, le reste n&#8217;étant lié qu&#8217;à la définition des opérations. Il permet de déterminer de manière unique une entité (dans notre cas une identité, donc l&#8217;accountId au niveau d&#8217;IDM).</p>
<p>Pour résumer : SPML est un standard <a href="http://www.oasis-open.org/" target="_blank">OASIS</a> (sous forme d&#8217;un schéma XML) d&#8217;approvisionnement, surtout utilisé pour la gestion d&#8217;identité, afin de faire communiquer entre elle différentes couches logiciels (brique métier de gestion d&#8217;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&#8217;avantage d&#8217;être très souple, mais il reste donc la problématique du contenu (charge utile) à traiter, sauf si on l&#8217;utilise un autre standard, comme le DSML, dans le cas d&#8217;une gestion d&#8217;identité.</p>
<p>Voilà, à plus tard pour des nouvelles aventures dans le monde merveilleux (ou pas) de SPML.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.asyd.net/2008/08/presentation-rapide-de-spml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
