LemonLDAP::NG, un WebSSO libre‎ en Perl !

2,241 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,241
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
35
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

LemonLDAP::NG, un WebSSO libre‎ en Perl !

  1. 1. LemonLDAP::NG Web access under protect Un WebSSO libre en Perl ! Clément OUDOT Journées Perl – 24 juin 2011
  2. 2. Sommaire.pm <ul><li>Présentation de LemonLDAP::NG
  3. 3. L'écosystème Perl
  4. 4. Hackez LemonLDAP::NG </li></ul>
  5. 5. Présentation.pm
  6. 6. Historique <ul><li>LemonLDAP a été créé en 2003 par Eric GERMAN (Ministère des Finances, France) pour remplace Novell iChain (Novell -> llevon -> Lemon)
  7. 7. Comme Novell ou SiteMinder, LemonLDAP utilise des en-têtes HTTP pour propager l'identité de l'utilisateur
  8. 8. LemonLDAP::NG est une réécriture complète de LemonLDAP par Xavier GUIMARD (Gendarmerie Nationale, France) en 2005
  9. 9. Thomas CHEMINEAU et Clément OUDOT complètent l'équipe de développement </li></ul>
  10. 10. Fonctionnalités principales <ul><li>Portail d'authentification
  11. 11. Menu dynamique des applications
  12. 12. Gestion du mot de passe (changement, réinitialisation, etc.)
  13. 13. Contrôle d'accès par URL
  14. 14. Génération d'en-têtes HTTP
  15. 15. Rejeu de formulaire (POST)
  16. 16. Notifications
  17. 17. Fournisseur d'identités </li></ul>
  18. 18. Parlons technique <ul><li>LemonLDAP::NG repose sur trois composants : </li><ul><li>Le portail (Portal) : interface d'authentification, menu des applications, changement de mot de passe
  19. 19. Le handler (Handler) : agent réalisant le contrôle des accès aux applications Web
  20. 20. Le manager (Manager) : interface de configuration, explorateur de sessions et de notifications </li></ul></ul>
  21. 21. Vue macroscopique
  22. 22. Utilisateur Application Web Portail WebSSO Cinématique simple 1 2 3
  23. 23. Cinématique détaillée
  24. 24. Les différentes bases <ul><li>Plusieurs « bases » sont utilisées : </li><ul><li>Authentification : comment vérifier les données d'authentification
  25. 25. Utilisateurs : où trouver les données de l'utilisateur
  26. 26. Mots de passe : où changer le mot de passe de l'utilisateur </li></ul><li>Exemple d'utilisation : authentification par Kerberos, données de l'utilisateur dans un annuaire LDAP </li></ul>
  27. 27. Méthodes d'authentification <ul><li>LemonLDAP::NG supporte de nombreuses méthodes d'authentification : </li><ul><li>LDAP
  28. 28. Database
  29. 29. SSL X509
  30. 30. Apache built-in modules (Kerberos, OTP, ...)
  31. 31. SAML 2.0
  32. 32. OpenID
  33. 33. Twitter
  34. 34. CAS
  35. 35. Yubikey </li></ul></ul>
  36. 36. Ecosysteme.pm
  37. 37. Les modules Perl <ul><li>LemonLDAP::NG est avant tout basé sur Apache mod_perl et Perl CGI
  38. 38. Il utilise un très grand nombre de modules Perl : Apache::Session, Net::LDAP, MIME::Base64, LWP::UserAgent, Cache::Cache, DBI, XML::Simple, CGI::Session, Regexp::Assemble, XML::LibXML, Crypt::Rijndael, IO::String, XML::LibXSLT, HTML::Template,SOAP::Lite, Config::IniFiles, JSON, Digest::HMAC, Crypt::OpenSSL::RSA, Crypt::OpenSSL::X509, Convert::PEM, Clone, MIME::Lite, Net::SMTP, String::Random, Net::OpenID, Net::Twitter, ... </li></ul>
  39. 39. CPAN <ul><li>Les modules Perl LemonLDAP::NG sont publiés sur le CPAN : </li><ul><li>http://search.cpan.org/dist/Lemonldap-NG-Common/
  40. 40. http://search.cpan.org/dist/Lemonldap-NG-Handler/
  41. 41. http://search.cpan.org/dist/Lemonldap-NG-Manager/
  42. 42. http://search.cpan.org/dist/Lemonldap-NG-Portal/ </li></ul><li>Les autres éléments (pages, scripts, etc.) sont fournis dans le sous-répertoire example/ de chaque module </li></ul>
  43. 43. Surchargez camarades ! <ul><li>LemonLDAP::NG surcharge la plupart des modules pour apporter ses propres spécificités : </li><ul><li>Lemonldap::NG::Common::Apache::Session : gestion de la génération de la clé, recherche par critères, etc
  44. 44. Lemonldap::NG::Handler::CGI : gestion authentification et autorisation
  45. 45. LemonLDAP::NG::Common::Safe : activation paramétrable de la cage d'exécution
  46. 46. Lemonldap::NG::Portal::OpenID::Server
  47. 47. Lemonldap::NG::Portal::_LDAP
  48. 48. ... </li></ul></ul>
  49. 49. Hackez.pm
  50. 50. CGI Perl my $cgi = Lemonldap::NG::Handler::CGI->new ({}); $cgi->authenticate(); $cgi->authorize(); # Get attributes (or macros) my $cn = $cgi->user->{cn} # Test if user is member of a Lemonldap::NG group (or LDAP mapped group) if( $cgi->group('admin') ) { # special html code for admins } else { # another HTML code }
  51. 51. Créer son module d'authentification package Lemonldap::NG::Portal::AuthCustom; use Lemonldap::NG::Portal::Simple; sub authInit { PE_OK; } sub extractFormInfo { PE_OK; } sub setAuthSessionInfo { PE_OK; } sub authenticate { PE_OK; } sub authFinish { PE_OK; } sub authLogout { PE_OK; } <ul><li>Méthodes : </li><ul><li>authInit
  52. 52. extractFormInfo
  53. 53. setAuthSessionInfo
  54. 54. authenticate
  55. 55. authFinish
  56. 56. authLogout
  57. 57. authForce </li></ul></ul>
  58. 58. Créer son module d'authentification <ul><li>Une fois le module créé, pour le charger, dans lemonldap-ng.ini : </li></ul>authentication = Custom <ul><li>Autres modules pouvant être créés : </li><ul><li>UserDBCustom
  59. 59. PasswordDBCustom </li></ul></ul>
  60. 60. Les expressions régulières, j'adore <ul><li>LemonLDAP::NG utilise les expressions régulières : </li><ul><li>Pour déterminer l'URL à protéger
  61. 61. Pour calculer les droits
  62. 62. Pour vérifier les syntaxes des champs en entrée
  63. 63. Pour afficher les modules du Menu </li></ul><li>De manière générale, LemonLDAP::NG évalue des expressions Perl pour tous les contrôles d'accès </li></ul>
  64. 64. Fonctions étendues <ul><li>Certaines fonctions spéciales sont fournies nativement : </li><ul><li>checkLogonHours
  65. 65. checkDate
  66. 66. basic
  67. 67. iso2unicode
  68. 68. unicode2iso </li></ul></ul>
  69. 69. Fonctions personnalisées <ul><li>Il est possible de charger sa propre librairie Perl (custom functions) : </li></ul>package SSOExtensions; sub function1 { my $portal = shift; my $param = shift; # Your nice code here return $param } 1;
  70. 70. JoinUs.pm http://lemonldap-ng.org IRC #lemonldap-ng @freenode
  71. 71. Questions.pm

×