{"id":1463,"date":"2011-06-04T17:26:46","date_gmt":"2011-06-04T15:26:46","guid":{"rendered":"http:\/\/j-mad.com\/blog\/?p=1463"},"modified":"2011-06-04T19:12:12","modified_gmt":"2011-06-04T17:12:12","slug":"django-urlcrypt-apres-les-contes-cest-lurl-de-la-crypte","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2011\/06\/04\/django-urlcrypt-apres-les-contes-cest-lurl-de-la-crypte\/","title":{"rendered":"Django-urlcrypt, apr\u00e8s les contes c&#8217;est l&#8217;url de la crypte."},"content":{"rendered":"<p>Voila, comme dit dans le billet pr\u00e9c\u00e9dent, je vais donc faire deux billets de django app de mai, \u00e7a m&#8217;apprendra \u00e0 \u00eatre en retard.<\/p>\n<p>Donc la deuxi\u00e8me django app du mois sera django-urlcrypt. Une petite pr\u00e9cision avant d&#8217;aller plus loin, c&#8217;est une des toutes premi\u00e8res fois o\u00f9 je vais parler d&#8217;une app sans avoir fait plus que la tester sur un projet de test, sans avoir d&#8217;id\u00e9e pr\u00e9cise de o\u00f9 ni comment je vais l&#8217;utiliser &#8216;en vrai&#8217;.<\/p>\n<h1>1- O\u00f9 on le trouve, comment on l\u2019installe, tout \u00e7a quoi (et la doc)\u00a0?<\/h1>\n<p>Alors on le trouve soit sur sa page <a title=\"django-urlcrypt\" href=\"http:\/\/pypi.python.org\/pypi\/django-urlcrypt\" target=\"_blank\">pypi<\/a> soit sur sa page <a title=\"django-urlcrypt\" href=\"https:\/\/github.com\/dziegler\/django-urlcrypt\" target=\"_blank\">github<\/a>.<\/p>\n<p>Pour l&#8217;installation l\u00e0 encore, les trois moyens habituels\u00a0:<\/p>\n<ul>\n<li> par easy_install<\/li>\n<li> pip<\/li>\n<li> un petit git clone des familles<\/li>\n<\/ul>\n<p>La doc, l\u00e0 c&#8217;est comme l&#8217;app pr\u00e9c\u00e9dente, elle est limit\u00e9e au contenu de la page de pypi ou au fichier <a title=\"readme\" href=\"https:\/\/github.com\/dziegler\/django-urlcrypt#readme\" target=\"_blank\">Readme.rst<\/a>.<\/p>\n<p>Bon alors c&#8217;est vrai que la doc est suffisante pour comprendre comment l&#8217;app marche, mais sur une app qui est aussi &#8216;sensible&#8217;, une bonne lecture du code ne fait pas de mal (c&#8217;est d&#8217;ailleurs ce que j&#8217;ai fait quand j&#8217;ai commenc\u00e9 \u00e0 faire joujou avec).<\/p>\n<h1>2- Mais au fait, \u00e0 quoi \u00e7a sert\u00a0?<\/h1>\n<p>En fait l&#8217;app a deux utilit\u00e9 m\u00eame si une seule est vraiment mise en avant sur la doc de l&#8217;app. La premi\u00e8re c&#8217;est de fournir aux utilisateurs une url ressemblant \u00e0 \u00e7a :\u00a0 http:\/\/www.mydomain.com\/r\/TkNJBkNFAghDWkdFGPUAQEfcDUJfEBIREgEUFl1BQ18IQkdDUUcPSh4ADAYAWhYKHh8KHBsHEw qui les authentifiera automatiquement et qui en plus les redirigera vers l&#8217;url que vous aurez voulu.\u00a0 (genre le renvoyer sur \/profil ou \/inbox)<\/p>\n<p>L&#8217;autre fonctionnalit\u00e9 moins mise en avant, c&#8217;est que l&#8217;on peut encoder des infos dans l&#8217;url, dans un message qui se trouve \u00eatre un dictionnaire. Alors honn\u00eatement je ne sais pas trop encore \u00e0 quoi cela peut servir, mais je trouve l&#8217;id\u00e9e coolos.<\/p>\n<h1>3- Comment \u00e7a marche\u00a0?<\/h1>\n<p>C&#8217;est tout simple.<\/p>\n<p>Dans une vue, on peut utiliser la fonction urlcrypt.generate_login_token qui prend en param l&#8217;utilisateur et l&#8217;url de redirect et qui g\u00e9n\u00e9re le token qui encode le tout. Ensuite il suffit de cr\u00e9er l&#8217;url compl\u00e8te qui va bien.<\/p>\n<p>Dans un template, on utilise le template tags encoded_url qui prend comme argument un user et une url de redirect.<\/p>\n<p>Enfin on peut utiliser les fonctions urlcrypt.encode_token et urlcrypt.decode_token<br \/>\nqui permettront de crypter \/ d\u00e9crypter un message contenu dans un dictionnaire (voir l&#8217;aide pour plus d&#8217;infos).<\/p>\n<p>Au niveau des configurations possibles, on peut configurer\u00a0:<\/p>\n<ul>\n<li> \u00e0 combien de requ\u00eates \u00e0 droit un visiteur<\/li>\n<li> l&#8217;url de fallblack si l&#8217;authentification contenu dans l&#8217;url echoue<\/li>\n<li> un path vers une cl\u00e9 priv\u00e9e RSA qui permettra d&#8217;ajouter un cryptage RSA lorsque l&#8217;on g\u00e9n\u00e8re le token.\u00a0 L&#8217;utilisation de ce param\u00e8tre est tr\u00e8s tr\u00e8s fortement recommand\u00e9 (pour rappel pour g\u00e9n\u00e9r\u00e9 le cl\u00e9\u00a0: ssh-keygen -t rsa -f  )<\/li>\n<\/ul>\n<h1>4- conclusion<\/h1>\n<p>Le m\u00e9canisme de login par url crypt\u00e9e me s\u00e9duit beaucoup. Mais d&#8217;un autre cot\u00e9 je me pose des questions au niveau s\u00e9curit\u00e9. Parce que l&#8217;url, l&#8217;utilisateur il va devoir la stocker. Et qu&#8217;autant m\u00e9moriser un mot de passe, on peut le faire, autant apprendre une url&#8230;, qu&#8217;en pensez vous\u00a0?<\/p>\n<p>La question de la dur\u00e9e de vie de l&#8217;url me semble aussi importante. J&#8217;aurais aim\u00e9 avoir dans l&#8217;app un syst\u00e8me qui permette de rendre des url obsol\u00e8tes parce que trop vieilles..<\/p>\n<p>Enfin concernant la deuxi\u00e8me m\u00e9thode d&#8217;utilisation, \u00e0 savoir encoder des messages dans l&#8217;url, je trouve l&#8217;id\u00e9e ravissante, j&#8217;ai envie de l&#8217;utiliser mais je ne sais pas \u00e0 quoi elle pourrait bien me servir. A r\u00e9fl\u00e9chir donc.<\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #ff0000;\">UPDATE:<\/span><\/h2>\n<p>on vient de me pointer quelques probl\u00e8mes qui existent avec cette app (<a href=\"http:\/\/www.reddit.com\/r\/django\/comments\/e040c\/djangourlcrypt\/\">discussion visible ici<\/a>) Apparement un des probl\u00e8mes a \u00e9t\u00e9 r\u00e9gl\u00e9 en utilisant RSA (mais son utilisation n&#8217;est toujours pas obligatoire) mais il me semble que le hash du password est toujours utilis\u00e9 dans certain cas. Ce qui n&#8217;est vraiment pas une bonne id\u00e9e. En l&#8217;\u00e9tat l&#8217;app n&#8217;est donc pas forc\u00e9ment \u00e0 utiliser, mais plut\u00f4t \u00e0 \u00e9tudier pour imaginer son propre syst\u00e8me.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voila, comme dit dans le billet pr\u00e9c\u00e9dent, je vais donc faire deux billets de django app de mai, \u00e7a m&#8217;apprendra \u00e0 \u00eatre en retard. Donc la deuxi\u00e8me django app du mois sera django-urlcrypt. Une petite pr\u00e9cision avant d&#8217;aller plus loin, c&#8217;est une des toutes premi\u00e8res fois o\u00f9 je vais parler d&#8217;une app sans avoir fait &hellip; <a href=\"https:\/\/j-mad.com\/blog\/2011\/06\/04\/django-urlcrypt-apres-les-contes-cest-lurl-de-la-crypte\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Django-urlcrypt, apr\u00e8s les contes c&#8217;est l&#8217;url de la crypte.<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[35],"tags":[],"class_list":["post-1463","post","type-post","status-publish","format-standard","hentry","category-la-django-app-du-mois"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-nB","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/1463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/comments?post=1463"}],"version-history":[{"count":3,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/1463\/revisions"}],"predecessor-version":[{"id":1465,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/1463\/revisions\/1465"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=1463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=1463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=1463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}