GNAP: OAuth la prochaine génération

L'année était 2012, et un protocole de sécurité révisé appelé OAuth 2 a balayé le Web, permettant aux utilisateurs d'utiliser des fournisseurs de sécurité pour se connecter facilement à des sites Web. De nombreux systèmes d'authentification unique, de Cognito d'AWS à Okta, implémentent OAuth. OAuth est ce qui vous permet de vous «authentifier auprès de Google» ou d'autres fournisseurs sur un site Web ou une application complètement différent.

Cela fonctionne comme un festival de la bière. Vous vous rendez à un bureau et vous authentifiez avec votre pièce d'identité (et un peu d'argent), et ils vous donnent des jetons. De là, vous vous rendez dans chaque tente à bière et échangez un jeton contre une bière. Le brasseur individuel n'a pas besoin de vérifier votre pièce d'identité ou de vous demander si vous avez payé. Ils prennent juste le jeton et vous donnent une bière. OAuth fonctionne de la même manière, mais avec des sites Web au lieu de bières.

Malheureusement, OAuth est le meilleur festival de la bière que 2020 ait à offrir.

J'ai parlé avec Dan Moore de FusionAuth à propos d'OAuth et d'un remplacement proposé appelé GNAP - qui est probablement prononcé sans le G comme «sieste». La prononciation renforce l'idée que la sécurité est un domaine vraiment passionnant. GNAP résout certaines limitations d'OAuth et lui ajoute de nouvelles fonctionnalités.

Pourquoi remplacer ou plutôt augmenter OAuth? OAuth a été conçu autour des navigateurs. Il suppose que l'expéditeur effectuant la demande peut gérer une redirection HTTP. Cette focalisation sur le navigateur Web est une pierre d'achoppement pour les applications mobiles ou tout type de «chose» sur «l'Internet des objets». De plus, les parties OAuth comme en 2007 et vous obligent à publier des paramètres de formulaire au lieu de JSON.

La spécification OAuth était vague à certains endroits, et le monde a changé depuis 2012. Il existe une multitude de RFC et de BCP, essentiellement des spécifications complémentaires que vous devez implémenter pour plus de capacités, une meilleure sécurité et une compatibilité générale. Un effort séparé appelé OAuth 2.1 espère réduire certains de ces addons en une seule spécification plus cohérente. Pour quelques-unes des motivations d'OAuth 2.1, voir Lee McGovern du post d'Okta «Combien de RFC faut-il pour changer une ampoule». OAuth 2.1, contrairement à GNAP, est juste une version incrémentielle sans nouveaux changements significatifs en plus de combiner la pile de spécifications en une seule spécification.

La spécification GNAP en est encore à ses débuts. Les auteurs de GNAP prévoient d'aller plus loin que OAuth 2.1 et de changer la nature du protocole lui-même. Au lieu d'utiliser des paramètres HTTP, vous pouvez utiliser JSON. Les points de terminaison d'application sont détectables. Vous n'êtes pas obligé de prendre en charge les redirections (ou les divers hacks autour de cela). Moore fait référence à ces changements sous le charmant terme «ergonomie du développeur».

Un objectif clé de GNAP est de séparer qui demande les ressources (RQ) et qui possède les ressources (RO).

IETF

GNAP propose également de prendre en charge de nouvelles fonctionnalités de sécurité telles que:

  • Lancement asynchrone et URL de l'application. Il s'agit de différents chemins d'authentification qui permettent au client de s'authentifier sans redirection. GNAP permet également aux applications de s'authentifier auprès de ressources tierces auxquelles le serveur de ressources et le serveur d'autorisation n'ont pas d'accès direct.
  • Demander des continuations. Ceux-ci permettent aux clients de négocier des choses comme des redirections ou d'autres détails d'authentification pendant le processus d'authentification. Ils permettent également à un client de négocier des privilèges supplémentaires ou des jetons d'accès.
  • Jetons d'accès multiples. Ceux-ci permettent aux clients de s'authentifier auprès de nombreuses ressources à la fois, par exemple en tant qu'utilisateur et administrateur.
  • Jetons de contrainte d'expéditeur. Bien qu'il existe des add-ons à OAuth 2 pour cette fonctionnalité appelée DPOP et MTLS, GNAP l'intégrerait directement dans le protocole. Revenez à notre exemple de tente à bière. Et si nous devions également chuchoter un mot de passe à l'oreille du vendeur tout en lui remettant le jeton? Si notre jeton était abandonné (ou intercepté), cela n'aurait pas d'importance car le porteur n'aurait pas le mot de passe.
  • Et GNAP fait hurler le fantôme de Kerberos.

Ça sonne bien? Pouvez-vous commencer à utiliser GNAP aujourd'hui? Si vous souhaitez collaborer, vous pouvez créer l'un des prototypes inclus dans la proposition existante sur GitHub.

Selon Moore, les auteurs visent à publier GNAP en 2022. Étant donné que chaque jour en 2020 est comme une semaine dans une année typique, GNAP est encore loin. Cependant, le groupe de travail GNAP recherche des collaborateurs, et vous pouvez rejoindre la liste de diffusion et offrir vos commentaires et votre expertise. Je suppose que vous ne pouvez pas tout réparer dans le monde, mais vous pouvez au moins aider à corriger OAuth.