
Il existe plusieurs façons de construire l'authentification dans un produit axé sur l'API comme SparkPost, et celle que nous avons choisie dès le départ est l'utilisation de clés API. Injecter votre clé API en tant qu'en-tête d'autorisation brut ou via l'authentification HTTP de base standard facilite beaucoup l'utilisation de nos API. Les clés API comme celles-ci sont une norme courante pour les webservices, mais quel est le niveau de sécurité de ce système ?
Il existe de nombreuses façons de construire l'authentification dans un produit API-first comme SparkPost, et celle que nous avons choisie dès le départ est l'utilisation de clés API. Injecter votre clé API en tant qu'en-tête d'authentification brute ou via HTTP Basic Auth standard rend l'utilisation de nos API très facile. Les clés API comme celle-ci sont un standard courant pour les services web, mais quel est le niveau de sécurité de ce système?
Les risques
Lors de l'utilisation de tout service web, si un attaquant obtient votre clé API, il peut agir en votre nom et faire des choses comme (dans notre cas) :
envoyer leurs emails gratuitement via votre compte
télécharger votre liste de destinataires et la donner à des spammeurs (s'ils ne sont pas eux-mêmes des spammeurs)
modifier vos modèles pour injecter des liens de phishing
envoyer du spam ou du phishing en votre nom
N'importe lequel de ces résultats pourrait être très dommageable pour votre réputation et pour votre entreprise, et dans le cas du phishing, potentiellement endommager directement vos utilisateurs finaux. C'est pourquoi il est extrêmement important de s'assurer que personne ne peut découvrir votre clé API.
Les odds
IP whitelisting à la rescousse
Lorsque vous créez une clé API, vous pouvez désormais spécifier une liste d'IPs autorisées à utiliser cette clé. Vous pouvez spécifier plusieurs IP, ainsi que des blocs IP, en utilisant la notation CIDR, vous n'avez donc pas besoin de lister vos serveurs individuellement. Lorsque la clé API est utilisée, pour les APIs REST ou SMTP, nous comparerons l'IP de connexion avec cette liste pour autoriser ou refuser l'accès.
Avec cette fonctionnalité, même si votre clé API est trouvée ou volée, seuls vos serveurs pourront l'utiliser. Compte tenu des risques et de la simplicité de sa mise en place, nous recommandons vivement à tous nos clients d'utiliser cette fonctionnalité.
Derniers mots
Quelques recommandations personnelles concernant la sécurité :
Ne gardez pas vos clés API dans le code. Il y a beaucoup d'avantages à les conserver en tant que variables d'environnement, comme le fait Heroku
Vous pouvez créer une quantité illimitée de clés API, et il est préférable pour la sécurité de répartir les responsabilités entre plusieurs clés API, plutôt qu'une seule clé couteau-suisse. Cela vous permettrait également d'avoir des listes blanches d'IP différentes par clé, pour une meilleure séparation des préoccupations
Si vous travaillez avec des tiers, ne partagez pas votre clé API mais créez-en une nouvelle pour eux, avec uniquement les autorisations nécessaires, et attachée à leurs IPs
Puisque les clés API ne peuvent être créées que via l'interface utilisateur, activer l'authentification à deux facteurs sur votre compte SparkPost est essentiel et ne prend que 2 minutes