Méthodes d'autorisation API
Dans cet article, nous explorerons trois mécanismes d'autorisation API courants : les clés API, l'authentification de base et les jetons OAuth JWT. Enfin, nous aborderons également comment Logto peut vous aider à protéger vos API en utilisant des jetons OAuth JWT.
Introduction
Dans le monde d'aujourd'hui, les APIs sont la colonne vertébrale des applications modernes. Elles sont le moyen principal d'accéder aux données et aux fonctionnalités des services backend. Les APIs permettent à différents systèmes logiciels de différentes parties de communiquer et de partager des données entre eux, les rendant indispensables pour les entreprises. Cependant, les APIs sont également une cible courante pour les attaquants. Le besoin de protéger les APIs est plus fort que jamais.
La protection des API est le processus de sécurisation des APIs contre tout accès non autorisé, mauvais usage et attaques. C'est un élément crucial de toute stratégie API. Dans cet article, nous explorerons trois mécanismes de protection API courants : les clés API, l'authentification de base et les jetons OAuth JWT. Enfin, nous montrerons aussi comment Logto peut protéger vos APIs en utilisant les jetons OAuth JWT.
Clés API
La clé API est la méthode la plus simple et la plus largement utilisée pour protéger les APIs. Une clé API est une longue chaîne de caractères générée par le fournisseur de l'API et partagée avec les utilisateurs autorisés. Cette clé doit être incluse dans l'en-tête de la requête lors de l'accès à l'API. Les clés API sont simples et efficaces pour les besoins de sécurité de base. Par exemple, des services populaires comme l'API Google Maps et AWS fournissent des clés API pour contrôler l'accès et surveiller l'utilisation. Cependant, elles ont des limitations en termes de sécurité. Elles sont souvent utilisées pour la communication entre machines.
e.g.
Avantages :
- Simple à implémenter : Les clés API sont faciles à implémenter et à utiliser. Elles consistent à attacher une clé à l'en-tête de la requête, ce qui en fait une méthode simple à comprendre et à utiliser pour les développeurs et les clients.
- Facile à surveiller : Les clés API sont faciles à surveiller. Vous pouvez suivre l'utilisation de chaque clé et les révoquer si nécessaire.
- Limitation de taux efficace : Les clés API sont efficaces pour la limitation de taux. Vous pouvez fixer une limite sur le nombre de requêtes par clé pour prévenir les abus.
- Adapté pour les données non sensibles : Les clés API conviennent aux données non sensibles ou aux APIs accessibles au public, où les exigences de sécurité sont moindres.
Inconvénients :
- Sécurité limitée : Les clés API ne sont pas suffisamment sécurisées pour les données sensibles, surtout pour les applications côté client. Elles sont souvent utilisées dans les communications entre machines.
- Non adapté pour l'authentification des utilisateurs : Les clés API sont liées aux applications ou aux systèmes, et non aux utilisateurs individuels, ce qui rend difficile l'identification des utilisateurs spécifiques ou le suivi de leurs actions.
- Pas d'expiration des tokens : Les clés API sont généralement statiques et ne expirent pas. Si une clé est compromise, elle pourrait être utilisée indéfiniment à moins d'être régénérée manuellement.
Authentification de base
L'authentification de base est une autre méthode courante pour sécuriser les APIs. C'est un schéma d'authentification simple intégré au protocole HTTP. Il consiste à envoyer un nom d'utilisateur et un mot de passe dans l'en-tête de la requête. Le serveur vérifie alors les identifiants et renvoie la ressource demandée s'ils sont valides. Par exemple, de nombreuses applications web et APIs RESTful utilisent l'authentification de base comme un moyen rapide et facile d'authentifier les utilisateurs. L'authentification de base est plus sécurisée que les clés API car elle utilise un nom d'utilisateur et un mot de passe au lieu d'une clé statique. Cependant, ce n'est toujours pas assez sécurisé pour les données sensibles. Les identifiants clients étant transmis en clair, ils sont susceptibles d'être interceptés. L'authentification de base convient aux systèmes internes où la connexion réseau est sécurisée, par exemple machine-to-machine.
e.g.
ou
Avantages :
- Sécurité renforcée : L'authentification de base est plus sécurisée que les clés API car elle utilise un nom d'utilisateur et un mot de passe au lieu d'une clé statique.
- Largement supporté : L'authentification de base est largement adoptée et prise en charge par la plupart des serveurs web et des navigateurs.
- Simplicité : Comme les clés API, l'authentification de base est relativement simple à configurer et à utiliser.
Inconvénients :
- Exposition des identifiants : L'authentification de base envoie les identifiants en clair, les rendant susceptibles d'être interceptés s'ils ne sont pas utilisés sur une connexion sécurisée (HTTPS).
- Pas d'expiration des tokens : L'authentification de base ne prend pas en charge l'expiration des tokens. Si un token est compromis, il pourrait être utilisé indéfiniment à moins d'être régénéré manuellement.
Jetons OAuth JWT
Le JSON Web Token (JWT), défini par RFC 7519, est une norme ouverte pour transmettre en toute sécurité des informations entre parties sous forme de fichier JSON. Il est couramment utilisé pour l'authentification et l'autorisation dans les applications web et les APIs.
Un JWT signé a le format suivant :
Il se compose de trois parties séparées par .
: l'en-tête, la charge utile et la signature.
Voici un exemple de JWT :
- en-tête : contient des informations sur le type de token et l'algorithme de hachage utilisé pour le signer.
- charge utile : contient les revendications (déclarations) sur l'utilisateur et d'autres données.
- signature : est un hachage de l'en-tête et de la charge, signé avec une clé secrète.
OAuth est une norme ouverte complète pour sécuriser les APIs et pour la délégation d'accès, couramment utilisée comme moyen permettant aux utilisateurs de client de donner aux sites web ou aux applications l'accès à leurs informations sur d'autres sites web sans leur fournir les mots de passe.
Lorsqu'ils sont utilisés conjointement avec JWT, les jetons OAuth JWT offrent une solution de sécurité robuste. Au lieu de transmettre des informations sensibles comme les noms d'utilisateur et les mots de passe à chaque requête, les jetons OAuth JWT sont délivrés aux clients autorisés après une authentification réussie. Ces jetons contiennent des informations sur l'utilisateur et leurs permissions. De plus, les jetons JWT sont signés numériquement pour éviter toute altération et peuvent expirer, ce qui apporte une couche de sécurité supplémentaire.
Un des principaux avantages des jetons OAuth JWT est leur flexibilité. Ils peuvent être utilisés pour divers types d'applications, y compris les applications web et mobiles, les solutions d'identification unique et plus encore. Par exemple, les principales plateformes de réseaux sociaux comme Facebook, Twitter et LinkedIn utilisent des jetons OAuth JWT pour authentifier les utilisateurs et permettre à des applications tierces d'accéder en toute sécurité aux données des utilisateurs.
Avantages :
- Sécurité améliorée : Les jetons OAuth JWT fournissent un niveau de sécurité plus élevé. Ils sont signés numériquement et peuvent être chiffrés, réduisant ainsi le risque d'accès non autorisé et de falsification des données.
- Identité utilisateur et contrôle d'accès : Les jetons JWT peuvent transporter des informations sur l'identité utilisateur et inclure des revendications qui spécifient les actions ou les ressources qu'un utilisateur est autorisé à accéder.
- Contrôle d'accès granulaire : Les jetons JWT peuvent être utilisés pour implémenter un contrôle d'accès granulaire. Par exemple, vous pouvez spécifier quelles ressources un utilisateur peut accéder et quelles actions il peut effectuer sur ces ressources.
- Expiration des tokens : Les jetons OAuth JWT peuvent être configurés pour expirer après une certaine période de temps, réduisant ainsi le risque de mauvaise utilisation.
Inconvénients :
- Complexité : Les jetons OAuth JWT sont plus complexes que les clés API et l'authentification de base. Ils nécessitent des étapes supplémentaires pour être configurés et utilisés.
- Gestion des tokens : Les jetons OAuth JWT doivent être gérés et révoqués si nécessaire. Cela peut être un défi pour les applications à grande échelle avec de nombreux utilisateurs et clients.
- Consommation de ressources : Générer et valider des jetons peut entraîner une certaine surcharge de performance, ce qui peut être un problème dans les scénarios de trafic élevé.
Protection API Logto
Le choix de la méthode d'authentification dépend des exigences spécifiques et des considérations de sécurité de votre application. Les clés API sont simples mais moins sécurisées, l'authentification de base offre plus de sécurité mais manque des fonctionnalités d'identité utilisateur, tandis que les jetons OAuth JWT fournissent une sécurité robuste et des capacités d'identité utilisateur, mais augmentent la complexité de l'implémentation et de la gestion.
Logto offre une manière simple et sécurisée de protéger votre API en utilisant des jetons OAuth JWT. Il prend en charge les normes OAuth 2.0 et OpenID Connect (OIDC), vous permettant de choisir la méthode d'authentification qui correspond le mieux à vos besoins. Vous pouvez utiliser le flux client_credentials
pour la communication entre machines et le flux authorization_code
pour les applications web.
Communication entre machines
Logto utilise le flux client_credentials
pour les applications de type machine-to-machine. Ce flux est adapté pour la communication entre serveurs backend, où le client est un client confidentiel qui peut stocker en toute sécurité les identifiants client. Il est également connu sous le nom de "OAuth à deux jambes" car il n'implique pas d'utilisateur. Les identifiants client sont utilisés directement comme une autorisation pour obtenir un jeton d'accès.
Le flux d'intégration est simple et direct :
- Créez une ressource API dans la console Logto.
- Créez un client machine-to-machine dans la console Logto.
- Envoyez une requête au point de terminaison des tokens Logto pour obtenir un jeton d'accès.
- Accédez à la ressource protégée avec le jeton d'accès.
Veuillez consulter notre documentation d'intégration machine-to-machine pour plus de détails.
Applications Web
Pour les clients publics comme les applications web, Logto utilise le flux authorization_code
pour authentifier les utilisateurs. Ce flux est adapté pour les applications web où le client est un client public qui ne peut pas stocker en toute sécurité les identifiants client. Il est également connu sous le nom de "OAuth à trois jambes" car il implique un utilisateur. L'utilisateur est redirigé vers le serveur d'autorisation pour authentifier et autoriser le client. Le client utilise ensuite le code d'autorisation pour obtenir un jeton d'accès.
Le flux d'intégration est légèrement plus complexe que le flux machine-to-machine :
Veuillez consulter notre article Protégez votre API Express.js avec JWT et Logto pour un exemple complet de l'intégration de Logto avec React et de l'accès à votre serveur Express APIs en utilisant des jetons JWT.