@SFLinux @clementoudot Authentification unique sur le Web avec le logiciel libre LemonLDAP::NG
Apr 12, 2017
@SFLinux@clementoudot
Authentification unique sur le Web avec le logiciel libre 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
Authentification unique / WebSSO
4@SFLinux@clementoudot
Définitions
● SSO : Single Sign On / Authentification unique● WebSSO : SSO pour les applications Web● Protocoles de WebSSO :
– CAS : Central Authentication Service
– SAML : Security Assertion Markup Language
– OpenID Connect
– WS-Federation
5@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
6@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é
7@SFLinux@clementoudot
Présentation de LemonLDAP::NG
8@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
9@SFLinux@clementoudot
Historique
2003 2006 2010 2016
Création du projet
VersionNG
SAMLCAS
OpenID
OpenID Connect
10@SFLinux@clementoudot
Composants
CommonCommon
ManagerManager HandlerHandler
PortalPortal
Interface de configuration
Formulaires et menu
Protection des applications
13@SFLinux@clementoudot
Modules d'authentification
LDAPLDAPADAD
ApacheApache SAMLSAML
CASCAS RadiusRadius OpenIDOpenID
WebIDWebID
BrowserBrowserIDID
DBIDBI
YubikeyYubikey
14@SFLinux@clementoudot
Passerelle multi-protocoles
SAMLSAMLCASCAS
OpenID OpenID ConnectConnect
15@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
16@SFLinux@clementoudot
Références d’utilisation de LemonLDAP::NG
17@SFLinux@clementoudot
Gendarmerie Nationale
● 100 000 utilisateurs● 300 applications
protégées● Plus de 25 millions de
requêtes par jour
18@SFLinux@clementoudot
Nantes Métropole
● Plus de 110 000 utilisateurs (comptes citoyens)
● 70 applications/services en ligne protégés
19@SFLinux@clementoudot
Air Corsica
● 300 utilisateurs● 10 applications
protégées, dont Microsoft SharePoint et Outlook Web Access
20@SFLinux@clementoudot
Ville de Villeurbanne
● 1000 utilisateurs● 10 applications
21@SFLinux@clementoudot
Implémentation des standards
22@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
23@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é
24@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
25@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
26@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
27@SFLinux@clementoudot
11
22
IdentityProvider
ServiceProvider
http://auth.example.com/saml/singleSignOn?IDPInitiated=1&spConfKey=myserviceprovider
SSO initié par l'IDP
28@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
29@SFLinux@clementoudot
OpenID 1.0 OpenID 2.0 OpenID Connect
30@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
31@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
32@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
33@SFLinux@clementoudot
http://jwt.io/
34@SFLinux@clementoudot
L’exemple de France Connect
36
Un service d'authentification
● FranceConnect ne fournit pas directement l'authentification, mais s'appuie sur des fournisseurs d'identités agréés, comme le service des impôts
● Après authentification, une « identité pivot » est transmise au service final (site d'une mairie, service public, etc.)
● Les échanges sont réalisés à l'aide du protocole OpenID Connect
40
Identité pivot (particulier)Champs Type Description
given_name string prénoms séparés par des espaces (standard OpenIDConnect)
family_name string le nom de famille de naissance (standard OpenIDConnect)
birthdate string la date de naissance au format YYYY-MM-DD (standard OpenIDConnect)
gender string male pour les hommes, female pour les femmes (standard OpenIDConnect)
birthplace stringle code INSEE du lieu de naissance (ou une chaîne vide si la personne est née à l'étranger)
birthcountry string le code INSEE du pays de naissance
41
Identité pivot (entreprise)
Champs Type Description
given_name string prénoms séparés par des espaces (standard OpenIDConnect)
family_name string le nom de famille (standard OpenIDConnect)
email string l'adresse mail de la personne
siret string le numéro SIRET ou SIREN de l'entreprise (non standard)
42@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/
43@SFLinux@clementoudot
Merci pour votre attention
Blog : http://slfx.ca/coudotTwitter : @clementoudot