Rechercher
Contactez-nous Suivez-nous sur Twitter En francais English Language
 

Abonnez-vous gratuitement à notre NEWSLETTER

Newsletter FR

Newsletter EN

Vulnérabilités

Se désabonner

Sécurité avec API : OAuth, Token-based access ou Key-based access

avril 2020 par Imed Eddine Bezahaf, consultant Cloud Computing chez Almond

Parlons de sécurité avec les API, ou comment identifier de manière sûre « le caller » dans Azure. Il existe en fait deux méthodes principales d’authentification assez populaires dans le cloud pour sécuriser les API : l’approche Key-based access zt celle de token-based access.

Que représentent ces deux approches ?

Le Key-based est un système d’authentification dans lequel il est possible de transmettre une clé à la requête API. Cette clé peut se trouver dans la chaîne de requête ou dans l’en-tête HTTP. Voici un exemple d’authentification par clé dans Azure : Blob REST API, Azure Function, Logic Apps et Service Bus (via SAS token)

L’ OAuth Token-based access est de son côté un mécanisme basé sur des tokens. Il s’agit d’un dispositif d’authentification dans lequel les informations d’identification et les secrets sont transmis à un fournisseur de tokens qui renvoie un jeton et le transmet ensuite à la partie qui s’y fie ou aux API

Sécurité et complexité

En général, l’approche OAuth est plus sécurisée, mais plus complexe pour les clients et les services. Dans ce contexte, les parties utilisatrices ne voient jamais les informations d’identification et les secrets dans un schéma d’authentification OAuth. Elles voient des tokens. Ces derniers sont révoqués au bout d’un certain temps, souvent quelques minutes, au maximum quelques heures.

D’un autre côté, les clés sont transmises directement aux parties qui s’y fient. Si elles sont communiquées sous forme de chaînes de requête, elles seront effectivement vérifiées. Il est donc beaucoup plus facile de dérober des clés. Chaque API mise en œuvre doit manier les clés et il est nécessaire de s’assurer qu’elles sont gérées correctement.

De plus, les clés ne sont généralement pas nombreuses. Par exemple, Azure Blob Storage possède une clé primaire et une clé secondaire que nous ne pouvons que révoquer. Si plus de deux utilisateurs manipulent le même compte, ils doivent partager la même clé. Il est de plus en plus difficile de vérifier quel consommateur utilise le service.

L’OAuth se fie à une partie qui traite les secrets, c’est-à-dire les fournisseurs d’identité. De plus, les providers d’identité permettent généralement la présence de plusieurs utilisateurs, service users et service principals, ce qui facilite la vérification et l’audit des clients (qui utilisent les clés).

D’un autre côté, nous avons mentionné la complexité. Il est assez facile de voir que l’ OAuth est plus compliquée. Au lieu d’invoquer directement une API, nous devons d’abord obtenir un jeton, puis le passer. Du côté des services, nous devons prendre ce jeton puis le valider. Cela nécessite souvent une opération cryptographique difficile.

Cette complexité peut désormais être atténuée par la plateforme.

Conclusion

L’authentification est un aspect essentiel de la conception d’une API. L’OAuth devrait être favorisé pour ses avantages en matière de sécurité, mais les clés ont un point d’entrée beaucoup plus bas. Il est bien sûr possible de soutenir les deux, en permettant aux consommateurs de commencer avec des clés pour "chauffer les pneus" et de passer à l’OAuth pour un travail plus sérieux.


Voir les articles précédents

    

Voir les articles suivants