OAuth 2.0

OAuth 2.0

Open AUTHorization : autorisation ouverte/libre.

Motivation

Autoriser un accès HTTP à ses ressources par une partie tierce, sans donner ses identifiants (credentials).

Analyse

OAuth vise à :

  • vérifier l'autorisation conférée au propriétaire de ressource
  • vérifier l'identité du client faisant une requête

OAuth 2.0 définit 4 rôles  en déclinant le "serveur" de OAuth 1.0 en 2 rôles distincts:

  1. le client (front end ou consumer)
  2. serveur de ressource (resource server), recevant les demandes de ressources avec jetons d'accès (access tokens) et les fournissant si elles sont valides ;
  3. serveur d'autorisation (authorization server) qui fournit au client des jetons d'accès (access tokens, en échange d'un code d'autorisation typiquement) aux ressources demandées, après authentification et autorisation du propriétaire de ressources.
  4. le propriétaire de ressource (resource owner) ou "utilisateur final" (end user) vers qui on se tournera pour lui demander s'il autorise u, accès, sans pour autant dévoiler son identité.

Il existe également des spécialisations de OAuth 2.0 pour :

Conception

l'architecture client /serveur :

Pour permettre de déléguer l'autorisation à un service tiers (Google par exemple), OAuth 2.x ajoute un 4ᵉ rôle en permettant de séparer le rôle serveur de OAuth 1.x en :

Authorization ServerClientResource ServerAuthorization ServerClientResource ServerResource Ownersignup (username, password)upload (resource)signup (clientId, clientSharedSecret)useMyResourceFrom (Server)initiate (realm,clientId,callback,hmacSha1Signature)oauth_token,oauth_token_secretredirectTo (authorizationServer/authorize?oauth_token)authorize (oauth_token)401 need to signsignin (username, password)Ok to share resource to Client?yesredirect?client/ready?oauth_token&oauth_verifierready(oauth_token,oauth_verifier)token(consumer_key,oauth_token,oauth_verifier,signature)ok(oauth_token,oauth_token_secret)getResource(realm,consumer_key,oauth_token,signature)resourceResource OwnerOAuth 2.x worfklow

OAuth 2.x définit également les formes possibles d'une autorisation donnée par le propriétaire de ressource :

  • un code d'autorisation (authorization code)
  • une autorisation implicite (implicit) qui évite la phase d'authentification du client
  • un mot de passe (password)
  • des identifiants client (client credentials)

Il existe également un mécanisme d'extensibilité pour ajouter d'autres formes d'autorisation.

Implémentation

Debugger

Notes

Publié .

Etendu par OpenID Connect en ajoutant des fonctionnalités standards d'identification.