38

[JDLL 2016] OpenID Connect et FranceConnect

Embed Size (px)

Citation preview

Page 1: [JDLL 2016] OpenID Connect et FranceConnect
Page 2: [JDLL 2016] OpenID Connect et FranceConnect

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● [email protected]

Page 3: [JDLL 2016] OpenID Connect et FranceConnect

3

Sommaire

1.France Connect, à quoi ça sert ?

2.Le protocole OpenID Connect

3.Utilisation avec le logiciel libre LemonLDAP::NG

Page 4: [JDLL 2016] OpenID Connect et FranceConnect

4

À quoi ça sert ?

Page 5: [JDLL 2016] OpenID Connect et FranceConnect

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

Page 6: [JDLL 2016] OpenID Connect et FranceConnect

6

Page 7: [JDLL 2016] OpenID Connect et FranceConnect

7

Consulter les points de son permis

Page 8: [JDLL 2016] OpenID Connect et FranceConnect

8

Site service-public.fr

Page 9: [JDLL 2016] OpenID Connect et FranceConnect

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 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

Page 10: [JDLL 2016] OpenID Connect et FranceConnect

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)

Page 11: [JDLL 2016] OpenID Connect et FranceConnect

11

Le protocole

Page 12: [JDLL 2016] OpenID Connect et FranceConnect

12

Page 13: [JDLL 2016] OpenID Connect et FranceConnect

13

Rôles

Resource owner(end-user)

Client(third-party)

AuthorizationServer

ResourceServer

Page 14: [JDLL 2016] OpenID Connect et FranceConnect

14

Authorization Request

Authorization Grant

Authorization Grant

Access Token

Access Token

Protected Resource

Page 15: [JDLL 2016] OpenID Connect et FranceConnect

15

Authorization

GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz

Page 16: [JDLL 2016] OpenID Connect et FranceConnect

16

Token

POST /token HTTP/1.1Host: server.example.comAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JWContent-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb

Page 17: [JDLL 2016] OpenID Connect et FranceConnect

17

Token

HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Cache-Control: no-storePragma: no-cache

{"access_token":"2YotnFZFEjr1zCsicMWpAA","token_type":"example","expires_in":3600,"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA","example_parameter":"example_value"}

Page 18: [JDLL 2016] OpenID Connect et FranceConnect

18

Resource

GET /resource/1 HTTP/1.1Host: example.comAuthorization: Bearer 2YotnFZFEjr1zCsicMWpAA

Page 19: [JDLL 2016] OpenID Connect et FranceConnect

19

Page 20: [JDLL 2016] OpenID Connect et FranceConnect

20

OpenID 1.0 OpenID 2.0 OpenID Connect

Page 21: [JDLL 2016] OpenID Connect et FranceConnect

21

RPRP OPOP

(1) AuthN Request

(2) AuthN & AuthZ

(3) AuthN Response

(4) UserInfo Request

(5) UserInfo Response

Page 22: [JDLL 2016] OpenID Connect et FranceConnect

22

OpenID Connect Protocol Suite

Core DiscoveryDynamic Client

Registration

Session Management

Form Post Response Mode

Minimal

Dynamic

Complete

Page 23: [JDLL 2016] OpenID Connect et FranceConnect

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

Page 24: [JDLL 2016] OpenID Connect et FranceConnect

24

http://jwt.io/

Page 25: [JDLL 2016] OpenID Connect et FranceConnect

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

Page 26: [JDLL 2016] OpenID Connect et FranceConnect

26

Page 27: [JDLL 2016] OpenID Connect et FranceConnect

27

Page 28: [JDLL 2016] OpenID Connect et FranceConnect

28

RPRP OPOPhttp://auth.example.com/oauth2.pl?openidconnectcallback=1;code=f6267efe92d0fc39bf2761c29de44286;state=ABCDEFGHIJKLMNOPQRSTUVWXXZ

Page 29: [JDLL 2016] OpenID Connect et FranceConnect

29

RPRP OPOP

POST /oauth2/token HTTP/1.1Host: auth.example.comAuthorization: Basic xxxxContent-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=f6267efe92d0fc39bf2761c29de44286&redirect_uri=http%3A%2F%2Fauth.example.com%2Foauth2.pl%3Fopenidconnectcallback%3D1

Page 30: [JDLL 2016] OpenID Connect et FranceConnect

30

RPRP OPOP

{"id_token" :"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY3IiOiJsb2EtMiIsImF1dGhfdGltZSI6MTQzMjExMzU5MywiaWF0IjoxNDMyMTEzOTY2LCJhdF9oYXNoIjoiOWF4enNOaTlwTkRrNXpXZWZLc002QSIsImlzcyI6Imh0dHA6Ly9hdXRoLmV4YW1wbGUuY29tLyIsImV4cCI6IjM2MDAiLCJhenAiOiJsZW1vbmxkYXAiLCJub25jZSI6IjEyMzQ1Njc4OTAiLCJzdWIiOiJjb3Vkb3RAbGluYWdvcmEuY29tIiwiYXVkIjpbImxlbW9ubGRhcCJdfQ==.daYGlzIr37dC1R0biIwdvQLM1LlCMsBFFcEufeMZtXsZvCiiAm-1LFJwJJJDHFOhd-WQnc9_GvtP3gTabXB8U4gQ2IW-bPNLUsjT24njmBPYunHy8YTQ5PV-QnQI5EK5WrrTS04AF86U5Qu6m3b27yWKFXkIuGI7EUvvByv8L1Anh1gPG3il5cEOnMFHIUzAaC6PkJiy1sjSBM53nLRAf9NQ6eux4iCVBIRwl26CCgmRTsTRy-iTxB3bf0LrILohUlAR_-HPWGseaIAMvqUpGeaovgGDPt4Zip9KERo7368ykgQc09VFlLvZIwyMTWQdVBIYdW0oY6eI9ZHjofn0mg", "expires_in" : "3600","access_token" : "512cdb7b97e073d0656ac9684cc715fe", "token_type" : "Bearer"}

Page 31: [JDLL 2016] OpenID Connect et FranceConnect

31

{ "acr": "loa-2", "auth_time": 1432113593, "iat": 1432113966, "at_hash": "9axzsNi9pNDk5zWefKsM6A", "iss": "http://auth.example.com/", "exp": "3600", "azp": "lemonldap", "nonce": "1234567890", "sub": "[email protected]", "aud": [ "lemonldap" ]}

ID Token payload

Page 32: [JDLL 2016] OpenID Connect et FranceConnect

32

RPRP OPOP

POST /oauth2/userinfo HTTP/1.1Host: auth.example.comAuthorization: Bearer 512cdb7b97e073d0656ac9684cc715feContent-Type: application/x-www-form-urlencoded

Page 33: [JDLL 2016] OpenID Connect et FranceConnect

33

RPRP OPOP

{ "name": "Clément OUDOT", "email": "[email protected]", "sub": "[email protected]"}

Page 34: [JDLL 2016] OpenID Connect et FranceConnect

34

Utilisation avec le logiciel libre

Page 35: [JDLL 2016] OpenID Connect et FranceConnect

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

Page 36: [JDLL 2016] OpenID Connect et FranceConnect

36

Page 37: [JDLL 2016] OpenID Connect et FranceConnect

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/authopenidconnect_franceconnect

● Démonstration : https://auth.openid.club/

Page 38: [JDLL 2016] OpenID Connect et FranceConnect

38

Des questions ?

On dirait qu'ils ont tout compris