Open AUTHorization : autorisation ouverte/libre.
Autoriser un accès HTTP à ses ressources par une partie tierce, sans donner ses identifiants (credentials).
OAuth vise à :
OAuth 2.0 définit 4 rôles en déclinant le "serveur" de OAuth 1.0 en 2 rôles distincts:
Il existe également des spécialisations de OAuth 2.0 pour :
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 :
sequenceDiagram
Title OAuth 2.x worfklow
Actor Resource Owner
Resource Owner->>Resource Server: signup (username, password)
Resource Owner->>Resource Server: upload (resource)
Client->>Resource Server: signup (clientId, clientSharedSecret)
Resource Owner->>Client: useMyResourceFrom (Server)
Client->>Resource Server: initiate (realm,clientId,callback,hmacSha1Signature)
Resource Server-->>Client: oauth_token,oauth_token_secret
Client-->>Resource Owner: redirectTo (authorizationServer/authorize?oauth_token)
Resource Owner->>Authorization Server: authorize (oauth_token)
Authorization Server-->>Resource Owner: 401 need to sign
Resource Owner->>Authorization Server: signin (username, password)
Authorization Server-->>Resource Owner: Ok to share resource to Client?
Resource Owner->>Authorization Server: yes
Authorization Server-->>Resource Owner: redirect?client/ready?oauth_token&oauth_verifier
Resource Owner->>Client: ready(oauth_token,oauth_verifier)
Client->>Authorization Server: token(consumer_key,oauth_token,oauth_verifier,signature)
Authorization Server-->>Client: ok(oauth_token,oauth_token_secret)
Client->>Resource Server: getResource(realm,consumer_key,oauth_token,signature)
Resource Server-->>Client: resource
OAuth 2.x définit également les formes possibles d'une autorisation donnée par le propriétaire de ressource :
Il existe également un mécanisme d'extensibilité pour ajouter d'autres formes d'autorisation.
Etendu par OpenID Connect en ajoutant des fonctionnalités standards d'identification.