oauth - nelmio_api_doc - symfony 4 nelmioapidocbundle




Autorisation OAuth vs Authentification (2)

La terminologie OAuth me préoccupe depuis longtemps maintenant. L'autorisation OAuth est-elle comme certains le suggèrent ou s'agit-il d'une authentification?

Corrigez-moi si je me trompe, mais j'ai toujours lu que l'autorisation était le fait d'autoriser l'accès d'une personne à une ressource. Pourtant, OAuth ne semble pas avoir d'implémentation permettant l'accès aux utilisateurs d'une ressource donnée. Toutes les implémentations d’OAuth parlent de fournir à un utilisateur un jeton (signé et parfois chiffré). Ce jeton est ensuite transmis avec chaque appel à un point de terminaison du service dorsal où sa validité est vérifiée, là encore pas un problème OAuth.

Est-ce que l'authentification OAuth (chaque article dit que ce n'est pas le cas), ce qui, à mon avis, oblige l'utilisateur à fournir des informations d'identification, ce qui prouve à son tour qu'un utilisateur devrait / ne devrait pas avoir accès?

Il semble donc que OAuth n’est pas une autorisation NI une authentification puisque celles-ci doivent être effectuées par d’autres processus. Alors qu'est-ce que c'est? Est-ce un processus de communication d'un jeton? Est-ce un mot fluff qui n'a pas vraiment de signification?

Il est difficile de poser une question sur ce sujet sans paraître énigmatique et superstitieux (fantômes et gobelins). Je m'attends donc à ce que répondre à cette question ne soit pas chose simple non plus. Entrez à vos risques et périls.


OAuth est une spécification pour autorisation

OAuth 2.0 est une spécification pour l'autorisation, mais PAS pour l'authentification. RFC 6749, 3.1. Autorisation Endpoint dit explicitement ce qui suit:

Le noeud final d'autorisation est utilisé pour interagir avec le propriétaire de la ressource et obtenir une autorisation. Le serveur d'autorisation DOIT d'abord vérifier l'identité du propriétaire de la ressource. La manière dont le serveur d'autorisation authentifie le propriétaire de la ressource (par exemple, identifiant de connexion et mot de passe, cookies de session) dépasse le cadre de la présente spécification .


Authentification OAuth?

L'authentification fournit des informations sur "qui est-ce". L'autorisation fournit des informations sur "qui accorde quelles autorisations à qui". Le flux d'autorisation contient l'authentification en premier lieu. C'est la raison pour laquelle les gens sont souvent confus.

De nombreuses bibliothèques et services utilisent OAuth 2.0 pour l'authentification. On l'appelle souvent "connexion sociale" et cela rend les gens plus confus. Si vous voyez "authentification OAuth" (et non "autorisation OAuth"), c'est une solution utilisant OAuth pour l'authentification.


OpenID Connect

OpenID 1.0 et OpenID 2.0 sont d'anciennes spécifications pour l'authentification. Ceux qui ont défini les spécifications s'attendaient à ce que les utilisateurs utilisent OpenID pour l'authentification. Cependant, certaines personnes ont commencé à utiliser OAuth 2.0 pour l'authentification (pas pour l'autorisation) et l'authentification OAuth a rapidement prévalu.

Du point de vue des gars OpenID, l'authentification basée sur OAuth n'était pas assez sécurisée, mais ils devaient admettre que les gens préféraient l'authentification OAuth. En conséquence, les gars OpenID ont décidé de définir une nouvelle spécification, OpenID Connect , en plus de OAuth 2.0.

Oui, cela a rendu les gens beaucoup plus confus.


Définitions en une phrase d'OAuth 2.0 et OpenID Connect

OAuth 2.0 est un cadre dans lequel un utilisateur d'un service peut autoriser une application tierce à accéder à ses données hébergées dans le service sans révéler ses informations d'identification (ID et mot de passe) à l'application.

OpenID Connect est une infrastructure au-dessus d’OAuth 2.0 dans laquelle une application tierce peut obtenir les informations d’identité d’un utilisateur gérées par un service.

(Désolé, ces définitions sont des extraits de la page d' overview de mon entreprise)


Définitions du point de vue des implémenteurs

L'authentification est un processus permettant de déterminer le sujet (= identifiant unique) d'un utilisateur final. Il y a plusieurs façons de déterminer le sujet. Identifiant et mot de passe, empreintes digitales, reconnaissance de l'iris, etc.

L'autorisation est un processus permettant d'associer le sujet aux autorisations demandées et à l'application cliente ayant demandé les autorisations. Un jeton d'accès représente l'association.


Voir également

  1. Full-Scratch, implémenteur d'OAuth et d'OpenID Connect, parle des résultats
  2. Diagrammes et films de tous les flux OAuth 2.0
  3. Diagrammes de tous les flux OpenID Connect
  4. Le guide le plus simple pour OAuth 2.0

OAuth n'est pas une API ni un service: c'est un standard ouvert pour l' authorization que tout le monde peut mettre en œuvre. OAuth a été créé en réponse au authentication pattern directe.

C'est OAuth:

How can I allow an app to access my data without necessarily giving it my password?

OAuth Acteurs

OAuth != authentication

OAuth n'est pas une authentification. C'est un protocole d'autorisation, ou, mieux encore, un protocole de délégation.

Authentification vs autorisation

Authentication est le processus de vérification d'une identité (qui ils prétendent être)

Authorization est le processus de vérification de ce qu'une personne est autorisée à faire (autorisations)

Lire la suite here , here