présentation de lemonldap::ng aux journées perl 2016
TRANSCRIPT
@SFLinux@clementoudot
Le logiciel LemonLDAP::NG
2@SFLinux@clementoudot
Clément OUDOT@clementoudot
http://sflx.ca/coudot
● Créé en 1999● >100 personnes● Montréal, Quebec, Toronto, Paris● ISO 9001:2004 / ISO 14001:2008● [email protected]
3@SFLinux@clementoudot
Sommaire
● Présentation de LemonLDAP::NG
● Implémentation des standards
● Écosystème Perl
4@SFLinux@clementoudot
Présentation de LemonLDAP::NG
5@SFLinux@clementoudot
LemonLDAP::NG
● Logiciel libre (GPLv2+) / OW2 consortium● Authentification unique (SSO), contrôle d'accès● Fournisseur de Service / Fournisseur d'Identité● Perl/Apache/Nginx/CGI/FCGI● Réinitialisation de mot de passe et création de compte● http://www.lemonldap-ng.org
6@SFLinux@clementoudot
Historique
2003 2006 2010 2016
Création du projet
VersionNG
SAMLCAS
OpenID
OpenID Connect
7@SFLinux@clementoudot
Composants
CommonCommon
ManagerManager HandlerHandler
PortalPortal
Interface de configuration
Formulaires et menu
Protection des applications
9@SFLinux@clementoudot
Fonctionnement basique d'un WebSSO
1.L'utilisateur accède sans être authentifié à une application intégrée au WebSSO
2.Il est redirigé sur un service d'authentification qui valide son identité et fournit un jeton
3.Le jeton est transmis à l'application qui obtient l'identité de l'utilisateur en validant/résolvant ce jeton
4.L'utilisateur accède aux autres applications sur le même principe, sans se réauthentifier
10@SFLinux@clementoudot
Application Web Portail d'authentification
Premier accèsRedirection pour authentification
Génération d'un jeton
Envoi du jeton
Validation du jetonRécupération de l'identité
12@SFLinux@clementoudot
Modules d'authentification
LDAPLDAPADAD
ApacheApache SAMLSAML
CASCAS RadiusRadius OpenIDOpenID
WebIDWebID
BrowserBrowserIDID
DBIDBI
YubikeyYubikey
13@SFLinux@clementoudot
Passerelle multi-protocoles
SAMLSAMLCASCAS
OpenID OpenID ConnectConnect
14@SFLinux@clementoudot
Fonctions « self service »
Changement Changement de mot de de mot de
passepasse
RéinitialisatiRéinitialisation de mot on de mot de passede passe
Création Création de de
comptecompte
15@SFLinux@clementoudot
Implémentation des standards
16@SFLinux@clementoudot
Le protocole CAS
● Central Authentication Service● À l'origine, uniquement dédié à l'authentification
(versions 1.0 et 2.0 du protocole)● Possibilité de partager des attributs depuis la version
3.0 du protocole
17@SFLinux@clementoudot
Client CAS Serveur CAS
Premier accèsRedirection pour authentification
Génération d'un ST
Envoi du ST
Validation du jeton
Récupération de l'identité
18@SFLinux@clementoudot
Le protocole SAML
● Security Assertion Markup Language● Basé sur XML, XML Security, SOAP● Choix des méthodes HTTP (GET ou POST)● Choix de l'utilisation d'un artefact pour transmettre les
messages via SOAP (Artefact GET ou Artefact POST)● Publication des informations de configuration
(metadonnées) au format XML
19@SFLinux@clementoudot
Spécifications du protocole
● Publiées sur le site de l'OASIS :– saml-core-2.0-os
– saml-authn-context-2.0-os
– saml-bindings-2.0-os
– saml-conformance-2.0-os
– saml-metadata-2.0-os
– saml-profiles-2.0-os
20@SFLinux@clementoudot
Fournisseur de service (SP) Fournisseur d'identité (IDP)
Premier accèsChoix de l'IDP
Requête d'authentification
Réponse d'authentificationEnvoi de
la réponse
Validation de la signatureLecture de l'assertion
21@SFLinux@clementoudot
11
22
IdentityProvider
ServiceProvider
http://auth.example.com/saml/singleSignOn?IDPInitiated=1&spConfKey=myserviceprovider
SSO initié par l'IDP
22@SFLinux@clementoudot
Le protocole OpenID Connect
● Basé sur OAuth2, REST, JSON, JWT, JOSE● Adapté aux navigateurs Web et aux applications
mobiles natives● Publication des informations de configuration au format
JSON● Consentement de l'utilisateur requis sur le partage
d'attributs
23@SFLinux@clementoudot
OpenID 1.0 OpenID 2.0 OpenID Connect
24@SFLinux@clementoudot
Partie de confiance (RP) Fournisseur OpenID (OP)
Premier accèsChoix de l'OP
Requête d'authentification
Création du JWT
Envoi du JWT
Validation de la signatureLecture du JWT
Lecture du UserInfo
25@SFLinux@clementoudot
Spécification du protocole
CoreDiscovery Dynamic Client
Registration
Session Management
Form Post Response Mode
MinimalDynamic
Complete
● Publiées sur le site de la fondation OpenID
26@SFLinux@clementoudot
Autres standards impliqués
OAuth 2.0 Core
OAuth 2.0 Bearer
OAuth 2.0 Assertions
OAuth 2.0 JWT Profile
OAuth 2.0 Responses
JWT JWS JWE JWK JWA WebFinger
JOSE
27@SFLinux@clementoudot
http://jwt.io/
28@SFLinux@clementoudot
Lien LL::NG / FranceConnect
● LemonLDAP::NG peut être configuré comme RP OpenID Connect
● France Connect peut être déclaré comme OP OpenID Connect
● Procédure détaillée : http://lemonldap-ng.org/documentation/latest/authopenidconnect_franceconnect
● Démonstration : https://auth.openid.club/
29@SFLinux@clementoudot
Écosystème Perl
30@SFLinux@clementoudot
Moose / Mouse
● Utilisation de Mouse (plus léger) sauf en Perl > 5.22 (bug https://github.com/gfx/p5-Mouse/issues/60)
● Principaux objets Mouse :
– Lemonldap::NG::Common::Session– Lemonldap::NG::Common::Captcha– Lemonldap::NG::Common::PSGI::Request– Lemonldap::NG::Manager::Conf::Parser
31@SFLinux@clementoudot
Les modules Apache::Session
● Nouveaux modules fournis via CPAN :– Apache::Session::LDAP– Apache::Session::NoSQL– Apache::Session::MongoDB– Apache::Session::Browseable
● Module interne intégrant la gestion du cache local : Lemonldap::NG::Common::Session
● Module d'interface à Apache::Session : Lemonldap::NG::Common::Apache ::Session
32@SFLinux@clementoudot
Handler::API
● Sélection automatique d'une API pour la requête HTTP dans module Lemonldap::NG::Handler::API :– ApacheMP1
– ApacheMP2
– PSGI (Nginx)
– CGI
33@SFLinux@clementoudot
Manager
● Frontend écrit en AngularJS● Backend Perl avec routeur dédié :
Lemonldap::NG::Common::PSGI::Router
34@SFLinux@clementoudot
CPAN
● Modules LL::NG publiés sur le CPAN :– http://search.cpan.org/dist/Lemonldap-NG-Common/
– http://search.cpan.org/dist/Lemonldap-NG-Handler/
– http://search.cpan.org/dist/Lemonldap-NG-Manager/
– http://search.cpan.org/dist/Lemonldap-NG-Portal/
35@SFLinux@clementoudot
Merci pour votre attention
Blog : http://slfx.ca/coudotTwitter : @clementoudot