40
La Grande Famille OAuth 2.0 Comment partager ses ressources de manière sécurisée sur Internet Guillaume Sauthier @sauthieg [email protected]

La Grande Famille OAuth 2.0

Embed Size (px)

Citation preview

Page 1: La Grande Famille OAuth 2.0

La Grande Famille OAuth 2.0Comment partager ses ressources de manière sécurisée sur Internet

Guillaume Sauthier @sauthieg

[email protected]

Page 2: La Grande Famille OAuth 2.0

Agenda

Pourquoi ?

OAuth 2.0, les bases

OpenId Connect, une application d’OAuth 2.0

UMA, ca se complique

Page 3: La Grande Famille OAuth 2.0

Pourquoi ?un nouveau standard

Page 4: La Grande Famille OAuth 2.0

L’existantSingle Sign-On propriétaire

Habituellement basé sur des cookies (same origin policy)

Cross-Domain SSO (form auto-submit)

Fédération SAML

Standard OASIS

Nativement cross-domain

Les Service Providers (SP) délèguent l’authentification à l’Identity Provider (IdP)

Page 5: La Grande Famille OAuth 2.0

Tout ca marche bien, mais …Single Sign-On propriétaire est … propriétaire

Intéropérabilité minimale

Couplage fort avec le fournisseur d’identité

Fédération SAML est … compliquée

Mise en oeuvre difficile

Pas très mobile-friendly

Qui aime encore le XML ?

Page 6: La Grande Famille OAuth 2.0

Les besoins modernesStandard endossé par l’industrie

Facilité d’utilisation

Application ubiquitaires (web, mobile, desktop, …)

Risques limités

Ne pas partager ses credentials

Contrôle sur les autorisations déléguées (révocation, …)

Implémentation du consommateur relativement simple

Page 7: La Grande Famille OAuth 2.0

OAuth 2.0les bases, les flows, la PoP

Page 8: La Grande Famille OAuth 2.0

Bonjour OAuth 2.0Standard IETF (RFC 6749)

Utilise du JSON

Basé sur des tokens

Access Token, Refresh Token

Consentement

Différents flows pour acquérir son token

Page 9: La Grande Famille OAuth 2.0

Client Resource Server

Authz Server

autorisation scope!

vérification scope?

accès

Page 10: La Grande Famille OAuth 2.0

Les flows de basepassword

Le plus direct, le moins sécurisé

Expose les crédentials de l’utilisateur

implicit

Pour les applications mobiles, applications JS “one-page”

Sécurité du token non garantie, pas de refresh token

client_credentials

Lorsque l’application a ses propres credentials

authorization code

Pour les applications web server-side

Page 11: La Grande Famille OAuth 2.0

authorization codepas à pas

Page 12: La Grande Famille OAuth 2.0

User (resource owner)

User-agent (web browser)

Auth Server

(as)

Application (client)

1. User authorization request

Page 13: La Grande Famille OAuth 2.0

User (resource owner)

User-agent (web browser)

Auth Server

(as)

Application (client)

2. User authorizes application

click

Page 14: La Grande Famille OAuth 2.0

User (resource owner)

User-agent (web browser)

Auth Server

(as)

Application (client)

3. Authorization code grant

HTTP/1.1 302 Redirect

Location: http://openig.example.com:8080/id_token/openid/callback?code=1234&state=xxxx

Page 15: La Grande Famille OAuth 2.0

User (resource owner)

User-agent (web browser)

Auth Server

(as)

Application (client)

4. Access Token Request

POST https://openam.example.com:8443/openam/oauth2/access_token Content-Type: application/x-www-form-urlencoded Authorization: Basic base64(client_id:client_secret)

grant_type=authorization_code& code=1234& redirect_uri=<redirect_uri>

Page 16: La Grande Famille OAuth 2.0

User (resource owner)

User-agent (web browser)

Auth Server

(as)

Application (client)

5. Access Token Grant

{ "access_token": "ACCESS_TOKEN", "token_type": "bearer", "expires_in": 2592000, "refresh_token": "REFRESH_TOKEN", "scope": "openid email"}

Page 17: La Grande Famille OAuth 2.0

User (resource owner)

User-agent (web browser)

Auth Server

(as)

Application (client)

1. User authorization request

2. User authorizes application

3. Authorisation code grant

4. Access Token Request

5. Access Token Grant

Page 18: La Grande Famille OAuth 2.0

Les flows additionnels

Device Flow

Comment donner un token à un périphérique qui n’a pas (ou peu) de UI ?

SAML 2 Bearer Assertion Flow

Quand une application fait partie d’une fédération et veut utiliser des ressources OAuth 2.0 de façon transparente

Page 19: La Grande Famille OAuth 2.0

Proof of Possession (PoP)

Bearers Tokens

Quiconque met la main sur un de ces tokens peut l’utiliser et se faire passer pour vous

Avec la PoP, un RS va pouvoir vérifier que l’émetteur de l’Access Token est celui qui l’a reçu à l’origine (le Client)

Cible les attaques type man-in-the-middle ou l’utilisation abusive de tokens par un resource server mal intentionné

Page 20: La Grande Famille OAuth 2.0

Scénario de validationClés asymétriques

Page 21: La Grande Famille OAuth 2.0

ASC

access-token endpoint

code + public key

POST https://openam.example.com:8443/openam/oauth2/access_token

Content-Type: application/x-www-form-urlencoded Authorization: Basic base64(client_id:client_secret)

grant_type=authorization_code& code=1234& redirect_uri=<redirect_uri>& cnf_key=base64(clé publique)

1 Le client fournit sa clé publique

Page 22: La Grande Famille OAuth 2.0

RSC

resource

access token

PUT https://snowcamp.io/speaker/guillaume/profile

Content-Type: application/json Authorization: Bearer <access_token>

{ “name”: “Guillaume Sauthier” }

2 Le client accède à la resource

Page 23: La Grande Famille OAuth 2.0

ASRS

introspection endpoint

access token

{ "valid": true, "scopes": "openid profile email", "cnf":{ "jwk":{ "kty": "EC", "use": "sig", "crv": "P-256", "x": "18wHLeIgW9wVN6VD1Txgpqy2LszYkMf6J8njVAibvhM", "y": "-V4dS4UaLMgP_4fY4j8ir7cl1TXlFdAgcx55o7TkcSA" } } }

3 Le RS “décode” le token et obtient la clé

Page 24: La Grande Famille OAuth 2.0

RSC

resource

4

WWW-Authenticate: Bearer error=“signing_request”; value=“<nonce>”

Le RS vérifie le client

Page 25: La Grande Famille OAuth 2.0

OpenId Connectune application d’OAuth 2.0

Page 26: La Grande Famille OAuth 2.0

En bref ?

Une façon standard d’obtenir des infos relatives à l’utilisateur authentifié, basée sur OAuth 2.0

OAuth 2.0 décrit comment protéger l’accès aux ressources

OpenId Connect standardise une resource dédiée aux informations utilisateurs et défini les scopes pour pouvoir y accéder

Page 27: La Grande Famille OAuth 2.0

Et concrètement ?

Activation basée sur la présence du scope dans la requête d’autorisation

Avec l’Access Token, le Client peut demander à l’AS le profil de l’utilisateur connecté

openid

Page 28: La Grande Famille OAuth 2.0

Le schéma

AS +

RSC

user-info endpoint

access token

Page 29: La Grande Famille OAuth 2.0

Il n’y a pas que ça

OpenId Connect définit un objet ‘id_token’, retourné avec l’Access Token

Clé de session

Contient des info “techniques”: provenance, destination, identification

JWT signé

Vérification de la provenance

Page 30: La Grande Famille OAuth 2.0

Qu’est ce qu’un JWT ?

JSON Web Token

Transporte du JSON de manière sécurisée

Signature (authenticité)

Encryption (confidentialité)

Page 31: La Grande Famille OAuth 2.0

UMAUser Managed Access

Page 32: La Grande Famille OAuth 2.0

Et celui-là, y sert à quoi ?

Partage de resources entre personnes

Délégation d’autorité (au serveur d’autorisation)

Contrôle des partages d’accès spécifiques à des ressources que je possède

Page 33: La Grande Famille OAuth 2.0

UMALe partage de photos

Page 34: La Grande Famille OAuth 2.0

AS RqP REQUESTING

PARTY

C CLIENT

RO RESOURCE

OWNER

RS RESOURCE

SERVER

AS AUTHORIZATION

SERVER

Authentification Partage de ressource Configuration

PAT

Page 35: La Grande Famille OAuth 2.0

AS RqP REQUESTING

PARTY

C CLIENT

RO RESOURCE

OWNER

RS RESOURCE

SERVER

AS AUTHORIZATION

SERVER

Authentification

AAT

Page 36: La Grande Famille OAuth 2.0

AS RqP REQUESTING

PARTY

C CLIENT

RO RESOURCE

OWNER

RS RESOURCE

SERVER

AS AUTHORIZATION

SERVER

Tentative d’accès Autorisation Vérification Ressource retournée

RPT

PAT

AAT

Page 37: La Grande Famille OAuth 2.0

UMA 2.0

Finalisé pour S1 2017

Un alignement sur OAuth 2.0

Simplifie la compréhension pour l’utilisateur et le déployeur

Nouveaux cas d’utilisation

Fournisseurs d’identités multiples

Page 38: La Grande Famille OAuth 2.0

Conclusion

OAuth 2.0 pour accéder à ses propres ressources

OpenId Connect pour accéder à son propre profil utilisateur

UMA pour partager avec d’autres ses propres ressources

Page 39: La Grande Famille OAuth 2.0

Q&A

Page 40: La Grande Famille OAuth 2.0

Resources

https://www.flickr.com/photos/clement127