{"id":1907,"date":"2015-02-14T22:21:23","date_gmt":"2015-02-14T20:21:23","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=1907"},"modified":"2016-03-29T18:59:50","modified_gmt":"2016-03-29T16:59:50","slug":"authentification-et-mot-de-passe","status":"publish","type":"post","link":"https:\/\/blog.nebule.org\/?p=1907","title":{"rendered":"Authentification et mot de passe"},"content":{"rendered":"<p style=\"text-align: justify;\">Dans la version pr\u00e9c\u00e9dente, proc\u00e9durale, de la librairie <a title=\"Projet nebule\" href=\"http:\/\/www.nebule.org\" target=\"_blank\">nebule<\/a> en <em>php<\/em>, l&rsquo;authentification \u00e9tait g\u00e9r\u00e9e via des variables de la session. On retrouvait l&rsquo;ID de l&rsquo;entit\u00e9 en cours ainsi que l&rsquo;ID de la cl\u00e9 priv\u00e9e associ\u00e9e et le mot de passe (si d\u00e9verrouill\u00e9) de cette cl\u00e9 priv\u00e9e.<\/p>\n<p style=\"text-align: justify;\">Les anciennes variables :<br \/>\n&#8211; <code>$_SESSION['nebule_publ_entite']<\/code><br \/>\n&#8211; <code>$_SESSION['nebule_priv_entite']<\/code><br \/>\n&#8211; <code>$_SESSION['nebule_pass_entite']<\/code><\/p>\n<p style=\"text-align: justify;\">Dans la nouvelle version de la librairie, en programmation orient\u00e9e objet, la premi\u00e8re variable qui r\u00e9f\u00e9rence l&rsquo;entit\u00e9 en cours d&rsquo;utilisation est toujours n\u00e9cessaire.<br \/>\nPar contre, la variable qui r\u00e9f\u00e9rence la cl\u00e9 priv\u00e9e est encore utilis\u00e9 mais n&rsquo;est d\u00e9j\u00e0 plus vraiment indispensable puisque l&rsquo;instance (l&rsquo;objet au sens programmation) de l&rsquo;entit\u00e9 contient la r\u00e9f\u00e9rence \u00e0 l&rsquo;ID de sa cl\u00e9 priv\u00e9e. Cet ID de cl\u00e9 priv\u00e9e est pr\u00e9-calcul\u00e9e lors de l&rsquo;initialisation de l&rsquo;instance et est accessible par une fonction publique. Il est m\u00eame possible que cette variable de session pour la cl\u00e9 priv\u00e9e disparaisse \u00e0 terme faute d&rsquo;usage.<br \/>\nEnfin, la variable contenant le mot de passe de la cl\u00e9 priv\u00e9e, elle, dispara\u00eet d\u00e9finitivement. Elle n&rsquo;\u00e9tait renseign\u00e9es que lorsque l&rsquo;entit\u00e9 \u00e9tait d\u00e9verrouill\u00e9es. D\u00e9sorm\u00e8s, le mot de passe, lorsque fourni, est stock\u00e9 dans l&rsquo;instance de l&rsquo;entit\u00e9 en cours. Cette instance r\u00e9f\u00e9rence ainsi la cl\u00e9 priv\u00e9e et le mot de passe associ\u00e9. Ce mot de passe est bien s\u00fcr v\u00e9rifi\u00e9 lors de son enregistrement puisque c&rsquo;est la seule et unique condition pour consid\u00e9rer l&rsquo;entit\u00e9 comme d\u00e9verrouill\u00e9e, que le mot de passe soit valide sur la cl\u00e9 priv\u00e9e.<\/p>\n<p style=\"text-align: justify;\">En terme de s\u00e9curit\u00e9 du code, c&rsquo;est plus propre. Le mot de passe ne peut \u00eatre consult\u00e9 directement par un module malveillant comme avec une variable de session par essence globale et donc accessible partout. Cependant, le m\u00e9canisme n&rsquo;est pas parfait puisqu&rsquo;une lecture brute de l&rsquo;instance permet d&rsquo;en extraire le contenu&#8230; et donc le mot de passe. Il faudra trouver un m\u00e9canisme pour renforcer \u00e7a&#8230;<br \/>\nL&rsquo;usage d&rsquo;un sel pour le mot de passe est en cours de r\u00e9flexion sachant qu&rsquo;il faudra dans ce cas cr\u00e9er un lien pour le rendre publique. C&rsquo;est un renforcement de la s\u00e9curit\u00e9 du mot de passe mais potentiellement une source de panne.<\/p>\n<p style=\"text-align: justify;\">En terme de gestion des entit\u00e9s, c&rsquo;est plus facile si on change vers une entit\u00e9 que l&rsquo;on ma\u00eetrise puisque les mots de passe des entit\u00e9s esclaves sont accessibles et peuvent \u00eatre pr\u00e9-inject\u00e9s dans les entit\u00e9s correspondantes. Et puis en cas de bascule vers une de ces entit\u00e9s esclaves, le retour \u00e0 l&rsquo;entit\u00e9 ma\u00eetresse est plus facile aussi puisque le mot de passe pourra rester dans celle-ci.<\/p>\n<p style=\"text-align: justify;\">En terme d&rsquo;\u00e9volution, il est d\u00e9j\u00e0 pr\u00e9visible qu&rsquo;une forme avanc\u00e9e d&rsquo;un usage multi-entit\u00e9 verra le jour. CF <a title=\"Entit\u00e9s multiples\" href=\"http:\/\/blog.nebule.org\/?p=1887\" target=\"_blank\">Entit\u00e9s multiples<\/a>. La pr\u00e9-initialisation des mots de passes de toutes les entit\u00e9s sous contr\u00f4le (entit\u00e9s esclaves) rendra cet usage beaucoup plus facile. Pour rappel, cet usage multi-entit\u00e9 permettra au choix soit d&rsquo;utiliser une et une seule entit\u00e9 \u00e0 un instant donn\u00e9 mais de pouvoir imm\u00e9diatement et facilement changer d&rsquo;entit\u00e9, soit d&rsquo;utiliser simultan\u00e9ment tout ou partie des entit\u00e9s sous contr\u00f4le. Dans ce dernier cas, les actions seront par contre faites avec une seule entit\u00e9 pr\u00e9-definie pour cela.<\/p>\n<p>Voici la structure de la classe <em>Entity<\/em> :<\/p>\n<pre>class Entity extends Object\n{\n\tconst ENTITY_MAX_SIZE = 16000;\n\tconst ENTITY_PASSWORD_SALT_SIZE = 128;\n\tconst ENTITY_TYPE = 'application\/x-pem-file';\n\n\tprivate $_publicKey = '';\n\tprivate $_privateKeyID;\n\tprivate $_privateKey = '';\n\tprivate $_privateKeyPassword;\n\tprivate $_privateKeyPasswordSalt;\n\tprivate $_issetPrivateKeyPassword = false;\n\tprivate $_faceCache = array();\n\n\tpublic function __construct(nebule $nebuleInstance, $id);\n\tpublic function __destruct();\n\tpublic function __toString();\n\tprivate function _loadEntity($id);\n\tprivate function _createNewEntity();\n\tprivate function _verifyEntity($entity);\n\tpublic function getType();\n\tpublic function getKeyType();\n\tpublic function getPublicKeyID();\n\tpublic function getPublicKey();\n\tprivate function _findPublicKey();\n\tpublic function getPrivateKeyID();\n\tprivate function _findPrivateKeyID();\n\tprivate function _findPrivateKey();\n\tpublic function setPrivateKeyPassword($passwd);\n\tpublic function unsetPrivateKeyPassword();\n\tpublic function checkPrivateKeyPassword();\n\tpublic function changePrivateKeyPassword($newpasswd);\n\tpublic function getFullName();\n\tpublic function getLocalisations();\n\tpublic function getLocalisation();\n\tpublic function getFaceID($size=400);\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Dans la version pr\u00e9c\u00e9dente, proc\u00e9durale, de la librairie nebule en php, l&rsquo;authentification \u00e9tait g\u00e9r\u00e9e via des variables de la session. On retrouvait l&rsquo;ID de l&rsquo;entit\u00e9 en cours ainsi que l&rsquo;ID de la cl\u00e9 priv\u00e9e associ\u00e9e et le mot de passe (si d\u00e9verrouill\u00e9) de cette cl\u00e9 priv\u00e9e. Les anciennes variables : &#8211; $_SESSION[&lsquo;nebule_publ_entite&rsquo;] &#8211; $_SESSION[&lsquo;nebule_priv_entite&rsquo;] &#8211; &hellip; <a href=\"https:\/\/blog.nebule.org\/?p=1907\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Authentification et mot de passe<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[59,81,7,13,105,19,20,24,47],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1907"}],"collection":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1907"}],"version-history":[{"count":1,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1907\/revisions"}],"predecessor-version":[{"id":2141,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1907\/revisions\/2141"}],"wp:attachment":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}