<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://mirmodynamics.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Mirmo Dynamics - Tag - sso</title>
  <link>http://mirmodynamics.com/</link>
  <atom:link href="http://mirmodynamics.com/feed/tag/sso/rss2" rel="self" type="application/rss+xml"/>
  <description>Si tu kiffes pas reunoi, t'écoutes pas et puis c'est tout.</description>
  <language>en</language>
  <pubDate>Wed, 01 Jul 2009 17:32:25 +0200</pubDate>
  <copyright>2003-2009 &amp;copy; Geoffrey Bachelet</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Incubated</title>
    <link>http://mirmodynamics.com/post/2006/11/01/Incubated</link>
    <guid isPermaLink="false">urn:md5:7a9cdfbfea0dc5e4f1cc96795fdb0db3</guid>
    <pubDate>Wed, 01 Nov 2006 16:10:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Geekeries</category>
        <category>bonnes pratiques</category><category>doc</category><category>google</category><category>librairie</category><category>microformats</category><category>optimisation</category><category>organisation</category><category>php</category><category>sso</category><category>svn</category><category>sécurité</category><category>ubuntu</category><category>unit testing</category><category>unix</category><category>way of life</category>    
    <description>&lt;p&gt;Les liens interressants (ou pas) de la semaine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://microformats.org/&quot; title=&quot;http://microformats.org/&quot;&gt;http://microformats.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.georss.org/&quot; title=&quot;http://www.georss.org/&quot;&gt;http://www.georss.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.thinkvitamin.com/features/ajax/create-a-searchable-google-map&quot; title=&quot;http://www.thinkvitamin.com/features/ajax/create-a-searchable-google-map&quot;&gt;http://www.thinkvitamin.com/feature...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://features.launchpad.net/distros/ubuntu/+specs&quot; title=&quot;https://features.launchpad.net/distros/ubuntu/+specs&quot;&gt;https://features.launchpad.net/dist...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://iwantmyopenid.org/bounty&quot; title=&quot;http://iwantmyopenid.org/bounty&quot;&gt;http://iwantmyopenid.org/bounty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://devzone.zend.com/node/view/id/1113&quot; title=&quot;http://devzone.zend.com/node/view/id/1113&quot;&gt;http://devzone.zend.com/node/view/i...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://weierophinney.net/matthew/uploads/php_development_best_practices.pdf&quot; title=&quot;http://weierophinney.net/matthew/uploads/php_development_best_practices.pdf&quot;&gt;http://weierophinney.net/matthew/up...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;    &lt;p&gt;J'ai pas mal entendu parler des microformats ces derniers temps, sans vraiment prendre le temps de me pencher dessus. &lt;a href=&quot;http://www.microformats.org/&quot;&gt;microformats.org&lt;/a&gt; présente l'occasion de se plonger dedans et de comprendre que finalement, les microformats peuvent être un facteur de développement non négligeable pour un site ou une application web. &lt;a href=&quot;http://www.georss.org/&quot;&gt;GeoRSS&lt;/a&gt; de son côté propose une implémentation &lt;em&gt;simple&lt;/em&gt; et &lt;em&gt;puissante&lt;/em&gt; (c'est eux qui le disent) du &lt;a href=&quot;http://en.wikipedia.org/wiki/Geotagging&quot;&gt;Geotagging&lt;/a&gt;. A voir si on ne peut pas coupler tout ça avec quelques pirouettes sur &lt;a href=&quot;http://mirmodynamics.com/post/2006/11/01/&quot;&gt;Google Maps&lt;/a&gt;...&lt;/p&gt;


&lt;p&gt;Pendant ce temps, chez Canonical, on établit déjà les &lt;a href=&quot;https://features.launchpad.net/distros/ubuntu/+specs&quot;&gt;specifications fonctionnelles de Feisty Fawn&lt;/a&gt;, et c'est assez prometteur :-)&lt;/p&gt;


&lt;p&gt;Enfin, dans le petit monde du &lt;acronym&gt;PHP&lt;/acronym&gt; et du webdev en général, il n'est jamais trop tard pour souligner l'existence de protocoles d'authentification centralisée libres comme &lt;a href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt;, qui de plus à lancé un &lt;em&gt;concours&lt;/em&gt; d'implémentation sous forme de &lt;a href=&quot;http://iwantmyopenid.org/bounty&quot;&gt;bounties&lt;/a&gt; ! On notera également les débuts de &lt;a href=&quot;http://devzone.zend.com/node/view/id/1113&quot;&gt;l'extension d' input filtering pour PHP&lt;/a&gt;, qui promet de simplifier grandement la validation de données externes dans les applis &lt;acronym&gt;PHP&lt;/acronym&gt;. Enfin, &lt;a href=&quot;http://weierophinney.net/matthew/uploads/php_development_best_practices.pdf&quot;&gt;les slides de la conférences PHP Best Practices&lt;/a&gt; qui a eu lieu à la ZendCon, c'est vraiment rempli de bons conseils.&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/11/01/Incubated#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/11/01/Incubated#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/711</wfw:commentRss>
      </item>
    
  <item>
    <title>Mettre en place un SSO avec Invision Power Board</title>
    <link>http://mirmodynamics.com/post/2006/10/24/Mettre-en-place-un-SSO-avec-Invision-Power-Board</link>
    <guid isPermaLink="false">urn:md5:e31ee19b3caa179f39e785cafe1ae2d1</guid>
    <pubDate>Wed, 25 Oct 2006 23:02:00 +0200</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>configuration</category><category>hack</category><category>howto</category><category>ip.board</category><category>php</category><category>sso</category><category>work</category>    
    <description>&lt;p&gt;Rien de plus simple, tout est déjà prévu. Après l'installation de votre forum &lt;acronym&gt;IPB&lt;/acronym&gt;, nous allons enregistrer une nouvelle méthode de login. Pour se faire, dans le panneau d'administration, nous nous dirigeons vers &lt;em&gt;Tools and Settings&lt;/em&gt;, puis dans &lt;em&gt;Create New Log In&lt;/em&gt; du menu &lt;em&gt;Log In Manager&lt;/em&gt;. On se retrouve devant un formulaire (assez explicite) que je vous laisse le soin de remplir. On dira juste que nous appellerons cette méthode de login &lt;em&gt;Mon SSO&lt;/em&gt; (&lt;em&gt;Log In Title&lt;/em&gt;) et qu'il vivra dans le répertoire &lt;code&gt;mon_sso&lt;/code&gt; (&lt;em&gt;Log In Files Folder Name&lt;/em&gt;). Pour que votre méthode de login soit active, vous devez cocher &lt;em&gt;Log In Enabled&lt;/em&gt;, et il est toujours bon de passer en mode &lt;em&gt;On-Fail&lt;/em&gt;, ainsi que d'autoriser la création d'utilisateurs (&lt;em&gt;Log In Allow Member Creation&lt;/em&gt;), qui créera automagiquement les utilisateurs dans la base locale d'&lt;acronym&gt;IPB&lt;/acronym&gt;.&lt;/p&gt;    &lt;p&gt;Ensuite on met les mains dans le camboui. Dans le répertoire &lt;code&gt;sources/loginauth/&lt;/code&gt; de votre installation, il doit exister un repertoire &lt;code&gt;external/&lt;/code&gt;, qui nous servira de base. On commence donc par le dupliquer:&lt;/p&gt;


&lt;pre&gt;cp -r external mon_sso&lt;/pre&gt;


&lt;p&gt;Puis on regarde un peu ce qu'il y a dedans:&lt;/p&gt;


&lt;pre&gt;mon_sso/
	auth.php
	conf.php
	index.html&lt;/pre&gt;


&lt;p&gt;Le fichier &lt;code&gt;index.html&lt;/code&gt; n'est qu'un empécheur de tourner en rond pour les gens qui explorent un peu trop les arbos web. Le premier fichier qui nous interresse est &lt;code&gt;conf.php&lt;/code&gt;, il contient les informations relatives à la base de données distantes. Là encore, c'est assez explicite et bien commenté. Le seul petit truc à savoir est que l'utilisateur qui se connectera à la base a besoin des droits &lt;em&gt;SELECT&lt;/em&gt; sur &lt;strong&gt;toute&lt;/strong&gt; la table, pas seulement sur les champs login / pass.&lt;/p&gt;


&lt;p&gt;Dans le meilleur des cas, votre &lt;acronym&gt;SSO&lt;/acronym&gt; est prêt :p Le fichier &lt;code&gt;auth.php&lt;/code&gt; contient les méthodes appelées par le gestionnaire d'identification. Vous pouvez avoir besoin de modifier &lt;code&gt;__compare_password&lt;/code&gt;, pour la vérification du mot de passe (j'ai par exemple changé la méthode de cryptage qui est md5 par défaut).&lt;/p&gt;


&lt;p&gt;A ce stade, vos utilisateurs peuvent s'identifier, mais le forum leur demande quand même leur mail et quelques infos que j'ai oublié. Il est bien évidemment possible d'éviter ça :-)
Dans la méthode &lt;code&gt;authenticate&lt;/code&gt;, vers la fin, quand un utilisateur local est créé, la main est passée à la méthode &lt;code&gt;create_local_member&lt;/code&gt;, qui redirige ensuite vers l'écran de complétion du compte. C'est là que nous intervenons. La méthode &lt;code&gt;create_local_member&lt;/code&gt; n'est pas implémenté dans &lt;code&gt;login_method&lt;/code&gt;, mais dans &lt;code&gt;login_core&lt;/code&gt;, qui se trouve dans le fichier &lt;code&gt;sources/loginauth/login_core.php&lt;/code&gt;, nous commençons par la copier/coller dans notre &lt;code&gt;login_method&lt;/code&gt;, puis nous modifions sa déclaration pour lui permettre de recevoir &lt;code&gt;$remote_member&lt;/code&gt; en paramètre:&lt;/p&gt;


&lt;pre&gt;function create_local_member( $remote_member )
{&lt;/pre&gt;


&lt;p&gt;Cette méthode permet de piocher dans les informations récupérées dans la base distante. Dans la partie &lt;em&gt;Populate member table(s)&lt;/em&gt;, par défaut, un faux mail est créé:&lt;/p&gt;


&lt;pre&gt;$email_tmp = $username.'@'.$timenow;&lt;/pre&gt;


&lt;p&gt;Qu'on peut remplacer par le mail qu'on a déjà potentiellement dans la base distante (disons que le champs s'appelle &lt;code&gt;mail&lt;/code&gt;):&lt;/p&gt;


&lt;pre&gt;$email_tmp = $remote_member['mail'];&lt;/pre&gt;


&lt;p&gt;On peut ensuite récupérer les champs que l'on veut pour les ajouter au membre local, par exemple dans mon cas, le &lt;code&gt;display_name&lt;/code&gt; (&lt;code&gt;nickname&lt;/code&gt; chez moi):&lt;/p&gt;


&lt;pre&gt;$display_name = $remote_member['nickname'];&lt;/pre&gt;


&lt;p&gt;en les rajoutant dans le tableau &lt;code&gt;$member&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Les deux derniers appels de méthode dans &lt;code&gt;create_local_member&lt;/code&gt;, &lt;code&gt;$this-&amp;gt;ipsclass-&amp;gt;DB-&amp;gt;do_insert&lt;/code&gt; et &lt;code&gt;$this-&amp;gt;ipsclass-&amp;gt;print-&amp;gt;redirect_screen&lt;/code&gt; sont à commenter, et on rajouter avant le bout de code suivant:&lt;/p&gt;


&lt;pre&gt;$this-&amp;gt;return_code = 'SUCCESS';
return;&lt;/pre&gt;


&lt;p&gt;Retour dans &lt;code&gt;authenticate&lt;/code&gt;, dans la partie &lt;em&gt;Got no member - but auth passed - create?&lt;/em&gt;, on modifie la première partie du &lt;code&gt;if&lt;/code&gt; ainsi:&lt;/p&gt;


&lt;pre&gt;if ( $this-&amp;gt;allow_create )
{
	$this-&amp;gt;create_local_member( $remote_member );
	$this-&amp;gt;_load_member($username);

	if ( $this-&amp;gt;member['id'] )
	{
		$this-&amp;gt;return_code = 'SUCCESS';
	}
	else
	{
		$this-&amp;gt;return_code = 'NO_USER';
	}
	return;
}&lt;/pre&gt;


&lt;p&gt;And voilà, nos utilisateurs peuvent désormais s'identifier sans avoir a re-entrer des informations que l'on possède déjà :-)&lt;/p&gt;</description>
    
    
    
          <comments>http://mirmodynamics.com/post/2006/10/24/Mettre-en-place-un-SSO-avec-Invision-Power-Board#comment-form</comments>
      <wfw:comment>http://mirmodynamics.com/post/2006/10/24/Mettre-en-place-un-SSO-avec-Invision-Power-Board#comment-form</wfw:comment>
      <wfw:commentRss>http://mirmodynamics.com/feed/atom/comments/693</wfw:commentRss>
      </item>
    
</channel>
</rss>