OAuth est un protocole d’authentification permettant de déléguer l’authentification à un service web responsable du compte utilisateur. Il est décrit dans une RFC, la RFC6749.
Comme SAML, le jeton envoyé au service où on veut s’identifier est validé par un procédé cryptographique de signature. Ici, le format est JWT (JSON Web Token), à base de JSON puisque XML était déjà ringard, avant d’être réinventé (en moins bien) en tant que JSON.
L’autorisation est accordée sur un scope précis : il s’agit des actions qu’on peut appeler, comme lire les informations d’un client, les modifier, les supprimer, etc. Cette autorisation est destinée à une audience (= la cible, application ou API) précise, pour une durée déterminée.
Processus
Le client final doit passer par plusieurs étapes (et plusieurs acteurs) avant d’accéder à la ressource.
- Il demande au propriétaire de la ressource (resource owner), qui indique si le client est autorisé ou pas à accéder à la ressource demandée.
- Avec cette autorisation, le client demande à un serveur d’authentification un jeton d’accès aux ressources souhaitées.
- Enfin, avec le jeton d’accès fourni par le serveur d’authentification, il accède à la ressource demandée.
Tout ceci est spécifié dans la RFC6749.
Sources et informations
- https://oauth.net/ et https://oauth.net/2/
- https://blog.netapsys.fr/oauth-comment-ca-marche/
- https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2
- https://zestedesavoir.com/articles/1616/comprendre-oauth-2-0-par-lexemple/
- https://tools.ietf.org/html/rfc6749 (The OAuth 2.0 Authorization Framework)
- https://tools.ietf.org/html/rfc7521 (Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants)
- https://aaronparecki.com/oauth-2-simplified/
- https://swagger.io/docs/specification/authentication/oauth2/
- https://auth0.com/blog/oauth2-the-complete-guide/ https://auth0.com/blog/introducing-the-mfa-api/ (MFA sur OAuth)
- Proof Key for Code Exchange by OAuth Public Clients (RFC7636)
- https://cybersecuritynews.com/oauth-2-0/