308 votes

Pourquoi y a-t-il un flux « Code d’autorisation » en OAuth2 quand « Implicite » flux fonctionne si bien ?

Avec le "Implicite" flux de la client (probablement un navigateur) recevra un jeton d'accès, après que le Propriétaire de la Ressource (c'est à dire l'utilisateur) a donné accès.

Avec le "Code d'Autorisation" flux toutefois, le client (généralement un serveur web) ne fait qu'obtenir un code d'autorisation après le Propriétaire de la Ressource (c'est à dire l'utilisateur) a donné accès. Avec ce code d'autorisation, le client puis fait un autre appel à l'API en passant client_id et client_secret avec le code d'autorisation à obtenir le jeton d'accès. Tous bien décrit ici.

Les deux flux ont exactement le même résultat: un jeton d'accès. Cependant, le "Implicite" de l'écoulement est beaucoup plus simple.

La question: Pourquoi s'embêter avec "Code d'Autorisation" le flux de, lorsque "Implicite" flux de coutures pour être bien? Pourquoi ne pas également à l'aide de "Implicite" pour les serveurs web?

C'est plus de travail à la fois pour le fournisseur et le client.

342voto

Nivco Points 4563

tl;dr: C'est à cause des raisons de sécurité.

OAuth 2.0 voulu répondre à ces deux critères:

  1. Vous souhaitez permettre aux développeurs d'utiliser non HTTPS redirect URI parce que tous les développeurs ont un serveur avec SSL activé et si ils le font, il n'est pas toujours correctement configuré (non auto-signé, de confiance des certificats SSL, synchronisé horloge du serveur...).
  2. Vous ne voulez pas que les pirates pour être en mesure de voler accès/actualiser les jetons par interception des requêtes.

Les détails ci-dessous:

L'implicite débit n'est possible que dans un environnement de navigateur pour des raisons de sécurité:

Dans l'implicite de flux le jeton d'accès est passé comme un fragment de hachage, seuls les navigateurs sont informés de fragment de hachage. Les navigateurs passer le fragment de hachage directement à la page web de destination/l'URI de redirection qui est le client de son site web (fragment de hachage ne font pas partie de la requête HTTP), de sorte que vous avez à lire le fragment de hachage à l'aide de Javascript. Fragment de hachage ne peut pas être intercepté par l'intermédiaire de serveurs/routeurs (c'est important).

Dans le code d'autorisation de flux, il n'est pas possible de passer d'un jeton d'accès directement dans un paramètre de l'URL, car les paramètres d'URL sont la partie de la Requête HTTP, donc un serveur intermédiaire/routeurs par lesquels votre demande de passer (peut-être des centaines) pourrait être en mesure de lire le jeton d'accès si vous n'êtes pas en utilisant une connexion sécurisée (HTTPS), permettant de ce qui est connu comme " Man-in-the-middle attaques.

Passer le jeton d'accès directement dans l'URL param pourrait, en théorie, être possible, mais la auth sever faudrait assurez-vous que le redirect URI est l'aide de HTTPS avec le cryptage TLS et "de confiance" certificat SSL pour être sûr que le serveur de destination est correcte et que la requête HTTP est entièrement cryptée. Avoir tous les développeurs d'acheter un certificat SSL et configurer SSL sur leur domaine serait une énorme douleur et permettrait de ralentir l'adoption de descendre énormément. C'est pourquoi un intermédiaire d'un emploi du temps code d'autorisation est utilisé comme nous sommes certains que seul le développeur sera en mesure d'échanger le auth code (parce que vous avez besoin de la clé secrète client) et que le code sera inutile de potentiels pirates d'intercepter les demandes de plus de transactions non chiffrés (parce qu'ils ne connaissent pas les secrets du client).

Vous pourrait aussi affirmer que l'implicite débit est moins sûr, il existe des vecteurs d'attaque potentiels comme l'usurpation du domaine lors de la redirection par exemple par le détournement de l'adresse IP du site internet du client. C'est une des raisons pour lesquelles l'implicite débit accorde uniquement des jetons d'accès et de ne jamais actualisation des jetons (qui ont plus de valeur). Pour remédier à ce problème, je vous conseille d'utiliser le protocole HTTPS chaque fois que possible.

2voto

Il n'y a pas grand chose à ajouter à Nivco réponse, mais en un point je suis en désaccord:

(fragment de hachage ne font pas partie de la requête HTTP), de sorte que vous avez à lire le fragment de hachage à l'aide de Javascript. Fragment de hachage ne peut pas être intercepté par l'intermédiaire de serveurs/routeurs (c'est important).

Oui, le fragment de hachage n'est pas envoyé dans la requête à l'application cliente. Mais le fragment de hachage est inclus dans la Location: en-tête de réponse à l'intérieur de la Redirection 302 réponse du serveur d'autorisation où il pourrait être sous-estimées. Donc, je ne suis pas sûr si ce est la raison derrière elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X