[JDLL 2016] OpenID Connect et FranceConnect

1 130 vues

Publié le

FranceConnect, à quoi ça sert ? Description du protocole OpenID Connect et implémentation dans LemonLDAP::NG

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 130
Sur SlideShare
0
Issues des intégrations
0
Intégrations
45
Actions
Partages
0
Téléchargements
25
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

[JDLL 2016] OpenID Connect et FranceConnect

  1. 1. 2 Clément OUDOT @clementoudot http://sflx.ca/coudot ● Créé en 1999 ● >100 personnes ● Montréal, Quebec City, Ottawa, Paris ● ISO 9001:2004 / ISO 14001:2008 ● contact@savoirfairelinux.com
  2. 2. 3 Sommaire 1.France Connect, à quoi ça sert ? 2.Le protocole OpenID Connect 3.Utilisation avec le logiciel libre LemonLDAP::NG
  3. 3. 4 À quoi ça sert ?
  4. 4. 5 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
  5. 5. 6
  6. 6. 7 Consulter les points de son permis
  7. 7. 8 Site service-public.fr
  8. 8. 9 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 string le 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
  9. 9. 10 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)
  10. 10. 11 Le protocole
  11. 11. 12
  12. 12. 13 Rôles Resource owner (end-user) Client (third-party) Authorization Server Resource Server
  13. 13. 14 Authorization Request Authorization Grant Authorization Grant Access Token Access Token Protected Resource
  14. 14. 15 Authorization GET /authorize? response_type=code&client_id=s6BhdRkqt3&st ate=xyz&redirect_uri=https%3A%2F%2Fclient %2Eexample%2Ecom%2Fcb https://client.example.com/cb? code=SplxlOBeZQQYbYS6WxSbIA &state=xyz
  15. 15. 16 Token POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form- urlencoded grant_type=authorization_code&code=SplxlOBe ZQQYbYS6WxSbIA&redirect_uri=https%3A%2F %2Fclient%2Eexample%2Ecom%2Fcb
  16. 16. 17 Token HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"example", "expires_in":3600, "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA", "example_parameter":"example_value" }
  17. 17. 18 Resource GET /resource/1 HTTP/1.1 Host: example.com Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA
  18. 18. 19
  19. 19. 20 OpenID 1.0 OpenID 2.0 OpenID Connect
  20. 20. 21 RPRP OPOP (1) AuthN Request (2) AuthN & AuthZ (3) AuthN Response (4) UserInfo Request (5) UserInfo Response
  21. 21. 22 OpenID Connect Protocol Suite Core Discovery Dynamic Client Registration Session Management Form Post Response Mode Minimal Dynamic Complete
  22. 22. 23 Underpinnings 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
  23. 23. 24 http://jwt.io/
  24. 24. 25 RPRP OPOP http://auth.example.com/oauth2/authorize? response_type=code &client_id=lemonldap &scope=openid%20profile%20email &redirect_uri=http%3A%2F %2Fauth.example.com%2Foauth2.pl %3Fopenidconnectcallback%3D1 &state=ABCDEFGHIJKLMNOPQRSTUVWXXZ
  25. 25. 26
  26. 26. 27
  27. 27. 28 RPRP OPOP http://auth.example.com/oauth2.pl? openidconnectcallback=1; code=f6267efe92d0fc39bf2761c29de44286; state=ABCDEFGHIJKLMNOPQRSTUVWXXZ
  28. 28. 29 RPRP OPOP POST /oauth2/token HTTP/1.1 Host: auth.example.com Authorization: Basic xxxx Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code=f6267efe92d0fc39bf2761c29de44286 &redirect_uri=http%3A%2F%2Fauth.example.com %2Foauth2.pl%3Fopenidconnectcallback%3D1
  29. 29. 30 RPRP OPOP {"id_token" :"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ 9.eyJhY3IiOiJsb2EtMiIsImF1dGhfdGltZSI6MTQzMjEx MzU5MywiaWF0IjoxNDMyMTEzOTY2LCJhdF9oYXNo IjoiOWF4enNOaTlwTkRrNXpXZWZLc002QSIsImlzcy I6Imh0dHA6Ly9hdXRoLmV4YW1wbGUuY29tLyIsIm V4cCI6IjM2MDAiLCJhenAiOiJsZW1vbmxkYXAiLCJub 25jZSI6IjEyMzQ1Njc4OTAiLCJzdWIiOiJjb3Vkb3RAbG luYWdvcmEuY29tIiwiYXVkIjpbImxlbW9ubGRhcCJdf Q==.daYGlzIr37dC1R0biIwdvQLM1LlCMsBFFcEufe MZtXsZvCiiAm-1LFJwJJJDHFOhd- WQnc9_GvtP3gTabXB8U4gQ2IW- bPNLUsjT24njmBPYunHy8YTQ5PV- QnQI5EK5WrrTS04AF86U5Qu6m3b27yWKFXkIuGI7 EUvvByv8L1Anh1gPG3il5cEOnMFHIUzAaC6PkJiy1sj SBM53nLRAf9NQ6eux4iCVBIRwl26CCgmRTsTRy- iTxB3bf0LrILohUlAR_- HPWGseaIAMvqUpGeaovgGDPt4Zip9KERo7368ykg Qc09VFlLvZIwyMTWQdVBIYdW0oY6eI9ZHjofn0mg" , "expires_in" : "3600","access_token" : "512cdb7b97e073d0656ac9684cc715fe", "token_type" : "Bearer"}
  30. 30. 31 { "acr": "loa-2", "auth_time": 1432113593, "iat": 1432113966, "at_hash": "9axzsNi9pNDk5zWefKsM6A", "iss": "http://auth.example.com/", "exp": "3600", "azp": "lemonldap", "nonce": "1234567890", "sub": "clement@oudot.me", "aud": [ "lemonldap" ] } ID Token payload
  31. 31. 32 RPRP OPOP POST /oauth2/userinfo HTTP/1.1 Host: auth.example.com Authorization: Bearer 512cdb7b97e073d0656ac9684cc715fe Content-Type: application/x-www-form-urlencoded
  32. 32. 33 RPRP OPOP { "name": "Clément OUDOT", "email": "clement@oudot.me", "sub": "clement@oudot.me" }
  33. 33. 34 Utilisation avec le logiciel libre
  34. 34. 35 LemonLDAP::NG ● Logiciel libre (GPLv2+) / OW2 consortium ● Authentification unique (SSO), contrôle d'accès ● Fournisseur de Service / Fournisseur d'Identité ● Perl/Apache/CGI/FCGI ● Réinitialisation de mot de passe et création de compte ● http://www.lemonldap-ng.org
  35. 35. 36
  36. 36. 37 Lien LL::NG / FranceConnect ● LemonLDAP::NG peut être configuré comme SP OpenID Connect ● France Connect peut être déclaré comme IDP OpenID Connect ● Procédure détaillée : http://lemonldap-ng.org/documentation/latest/authopen idconnect_franceconnect ● Démonstration : https://auth.openid.club/
  37. 37. 38 Des questions ? On dirait qu'ils ont tout compris

×