oauth - quoi - nuxeo documentation




Quelle est la différence entre les deux workflows? Quand utiliser le flux du code d'autorisation? (5)

Flux implicite

Avantages

  • Plus simple à mettre en œuvre

Désavantages

  • Jetons d'accès visibles pour le navigateur
  • L'origine des jetons d'accès ne peut pas être déterminée
  • Les jetons d'accès ne peuvent pas expirer (par la politique de Google)

Flux de code d'autorisation

Avantages

  • Le plus sécurisé
  • Les jetons d'accès et les jetons d'actualisation peuvent être créés uniquement si un secret partagé est connu
  • Peut être amélioré avec de nouvelles fonctionnalités de sécurité et UX lorsqu'elles deviennent disponibles

Désavantages

  • Doit implémenter plusieurs points de terminaison auth

Citation: https://developers.google.com/actions/develop/identity/oauth2-overview#supported_oauth_20_flows

OAuth 2.0 a plusieurs flux de travail. J'ai quelques questions concernant les deux.

  1. Flux de code d'autorisation - L'utilisateur se connecte à partir de l'application cliente, le serveur d'autorisation renvoie un code d'autorisation à l'application. L'application échange ensuite le code d'autorisation pour le jeton d'accès.
  2. Flux de subvention implicite - L'utilisateur se connecte à partir de l'application cliente, le serveur d'autorisation émet un jeton d'accès directement à l'application cliente.

Quelle est la différence entre les deux approches en termes de sécurité? Lequel est le plus sûr et pourquoi?

Je ne vois pas pourquoi une étape supplémentaire (code d'autorisation d'échange pour token) est ajoutée dans un flux de travail lorsque le serveur peut émettre directement un jeton Access.

Différents sites Web indiquent que le flux de code d'autorisation est utilisé lorsque l'application cliente peut conserver les informations d'identification sécurisées. Pourquoi?


Du point de vue pratique (Ce que j'ai compris), La raison principale pour avoir le code d'Authz est:

  1. Prise en charge de l'actualisation des jetons (accès à long terme par des applications pour le compte de l'utilisateur), non prise en charge par implicite: reportez-vous à l' https://tools.ietf.org/html/rfc6749#section-4.2 : https://tools.ietf.org/html/rfc6749#section-4.2
  2. Prise en charge de la page de consentement, où le propriétaire de ressource peut contrôler l'accès à fournir (type d'autorisation / page d'autorisation que vous voyez dans google). La même chose n'est pas implicite. Voir la section: https://tools.ietf.org/html/rfc6749#section-4.1 , point (B)

"Le serveur d'autorisation authentifie le propriétaire de la ressource (via l'user-agent) et détermine si le propriétaire de la ressource accorde ou refuse la demande d'accès du client"

En dehors de cela, à l'aide des jetons d'actualisation, les applications peuvent obtenir un accès à long terme aux données utilisateur.


L'attribution implicite est similaire à l'attribution de code d'autorisation avec deux différences distinctes.

Il est destiné à être utilisé par des clients basés sur un agent utilisateur (par exemple, des applications Web à une seule page) qui ne peuvent pas garder un client secret car tout le code et le stockage de l'application sont facilement accessibles.

Deuxièmement, au lieu que le serveur d'autorisation retourne un code d'autorisation qui est échangé contre un jeton d'accès, le serveur d'autorisation renvoie un jeton d'accès.

Veuillez trouver les détails ici http://oauth2.thephpleague.com/authorization-server/which-grant/


La différence entre les deux est que:

  1. Dans le flux implicite, le jeton est renvoyé directement via l'URL de redirection avec le signe "#" et utilisé principalement dans les clients javascript ou les applications mobiles qui n'ont pas de côté serveur, et le client n'a pas besoin de fournir son secret dans certaines implémentations .

  2. Dans le flux de code d'autorisation, le code est renvoyé avec "?" Pour être lisible par le serveur, le serveur doit fournir cette fois le secret du client à l'URL du jeton pour obtenir le jeton en tant qu'objet json du serveur d'autorisation. Il est utilisé dans le cas où vous avez un serveur d'application qui peut gérer cela et stocker le jeton d'utilisateur avec son profil sur son propre système, et principalement utilisé pour les applications mobiles courantes.

cela dépend de la nature de votre application cliente, qui est un "code d'autorisation" plus sécurisé car il demande le secret sur le client et le jeton peut être envoyé entre le serveur d'autorisation et l'application cliente sur une connexion très sécurisée. restreindre certains clients à utiliser uniquement le «code d'autorisation» et interdire


Le access_token est ce dont vous avez besoin pour appeler une ressource protégée (une API). Dans le flux du code d'autorisation, il y a deux étapes pour l'obtenir:

  1. L'utilisateur doit s'authentifier et renvoie un code au consommateur de l'API (appelé "Client").
  2. Le "client" de l'API (généralement votre serveur web) échange le code obtenu en # 1 pour un access_token , s'authentifiant avec un client_id et client_secret
  3. Il peut ensuite appeler l'API avec access_token .

Donc, il y a un double contrôle: l'utilisateur qui possède les ressources a fait surface à travers une API et le client utilisant l'API (par exemple une application web). Les deux sont validés pour que l'accès soit accordé. Notez la nature "autorisation" de OAuth ici: l'utilisateur accorde l'accès à sa ressource (via le code retourné après l'authentification) à une application, l'app get est un access_token , et appelle au nom de l'utilisateur.

Dans le flux implicite, l'étape 2 est omise. Ainsi, après l'authentification de l'utilisateur, un access_token est renvoyé directement, que vous pouvez utiliser pour accéder à la ressource. L'API ne sait pas qui appelle cette API. N'importe qui avec access_token peut le faire, alors que dans l'exemple précédent, seule l'application web le ferait (c'est interne n'est normalement accessible à personne).

Le flux implicite est généralement utilisé dans les scénarios où le stockage de client id et du client secret n'est pas recommandé (un périphérique par exemple, même si beaucoup le font de toute façon). C'est ce que signifie la clause de non-responsabilité. Les gens ont accès au code client et peuvent donc obtenir les informations d'identification et faire semblant de devenir des clients ressources. Dans le flux implicite, toutes les données sont volatiles et rien n'est stocké dans l'application.