Commentaires

  1. Salut,

    Je cherchais un article dans ce genre depuis longtemps, c’était très instructif.
    Je trouve un peu dommage et « court » la partie dédiée au api-key utilisables avec une application.

    Je m’interroge d’ailleurs sur la sécurité effective via la clé secrète, puisqu’on a vite besoin de communiquer cette clé secrète et l’api key lorsqu’un client veut utiliser notre api pour son application.
    Si quelqu’un intercepte les informations à ce moment précis, on ne sécurise pas plus qu’avec le simple usage de l’api key, non ?
    Donc il doit me manquer une subtilité que je n’ai pas encore comprise…

    Merci !

    1. Salut,
      Le client doit garder précieusement sa clé secrète et ne jamais la transmettre. La clé secrète va servir à signer la requête côté client et vérifier la signature de la requête côté serveur (pour rappel la clé API permet d’identifier le client et la signature de la requête d’authentifier le client). Maintenant, comment transmettre cette clé secrète de manière sécurisée ? ça c’est à toi de voir, mais si on part du principe que c’est le serveur qui l’a transmet via le protocole HTTP, tu dois sécuriser la requête en y ajoutant une couche de chiffrement (HTTPS). Tu as la même problématique lorsque tu te connectes à un site internet, ton mot de passe doit bien être transmis au serveur. Après rien ne t’empêche de ne transmettre la clé secrète qu’une seule fois, si le client perd cette clé secrète il devra redemander un couple clé API/clé secrète. Tu peux également mettre en place l’algorithme de Diffie-Hellman qui permettra au client et au serveur de se mettre d’accord sur la clé secrète sans jamais transmettre celle-ci: Lien wikipédia et Vidéo explicative mais personnellement je me contente d’utiliser le protocole HTTPS. J’espère avoir répondu à ta question 😉

  2. @Arkerone,
    Article intéressant.
    Je cherche aussi à authentifier une application, et le partage de la clef privée me pose problème.
    J’ai pensé à l’utilisation de certificat TLS en mode two-way authentification. Mais comment garantir (tous comme pour l’api-key) que la clef privée n’a pas été compromise ?
    Normalement il devrait il y avoir une clef privée par application déployé. Pour moi le problème n’est toujours pas résolu.

    1. Merci pour ton commentaire. La clé privée est transmise qu’une seule fois (lors de sa génération) et celle-ci transite via le protocole HTTPS donc elle est chiffrée sur le réseau. C’est ensuite à la responsabilité du client de stocker cette clé privée de manière sécurisée. Par contre, tu peux associer une liste d’adresses IP autorisées aux clés API et vérifier la provenance des requêtes. Après comme je l’ai dit dans un précédent commentaire, tu as la même problématique lorsque tu te connectes à un site internet, ton mot de passe doit bien être transmis au serveur. Et sinon oui il y a bien une clé privée par application déployée.

  3. Bonjour et merci pour l’article, j’ai justement créer une api pour un client que je doit sécurisé avec une clé , mon api est écrite en php et je dois avoué que je vois pas de tout comment faire .je code juste depuis 3 mois .
    avez vous des ressources ou des exemples en php ?
    merci

  4. Bravo à toi , on peut pas faire plus claire .
    justement j’ai créé une api en php , il me manque juste de passé une clé pour api
    je sais pas ce que ça donne avec php , j’ai vu ton article avec node.js
    c’est vraiment très propre

  5. Hello,
    Merci pour tes articles, ça fait du bien d’avoir quelques infos en Français 🙂
    j’ai parcouru différents site concernant JWT et notamment l’histoire du refresh Token, mais je n’ai pas encore saisie pourquoi, pourquoi un refresh token alors qu’un token fait l’affaire.

    1/ je comprend bien que l’AccessToken doit avoir une expiration courte (fonction des données)
    2/ je comprend aussi le fait qu’une fois l’AccessToken expiré, l’utilisateur devra s’authentifier de nouveau et ce n’est pas top.

    Admettons que notre AccessToken ai une validité de 1 minute et notre RefreshToken 10 minutes.
    Si on utilise pas de RefreshToken, l’utilisateur devra s’authentifier chaque minute …
    A l’aide du RefreshToken, l’utilisateur devra s’authentifier toutes les 10 minutes ; alors pourquoi ne pas passer directement l’AccessToken à 10 minutes ?

    On est d’accord que 10 minutes c’est un exemple et on mettra plus tôt 24 heures que 10 minutes.

    J’ai pensé aussi à avoir un AccessToken avec une courte durée, genre 10 minute, puis comme mon application effectue un ping à l’API sur chaque page / contenu sécurisé (afin de vérifier si le user est connecté et le token valide), l’API peut à se moment générer un nouveau AccessToken qu’elle transmettra à l’APP de la même façon qu’un RefreshToken.

    Il y a un truc qui m’échappe, tu pourrais m’éclairer ?
    la finalité de la chose, c’est que l’on ne veut pas déconnecter l’utilisateur tant qu’il est actif sur l’APP qu’importe le temps définis sur l’AccessToken ; ce temps doit correspondre selon moi à une durée d’inactivité.

    1. L’access token ne doit pas être utilisé pour récupérer un autre access token. Je te donne un exemple, imagine que ton access token ait été intercepté par un pirate (je rappelle que l’access token est envoyé lors de chaque appel API), si celui-ci permet de récupérer un autre access token, comme tu l’as décrit, le pirate pourra avoir accès à ton compte sans limite de temps. Le fait d’avoir une durée de vie courte pour un access token limite ce risque car une fois arrivé à expiration, les seuls moyens d’en récupérer un nouveau sont soit se réauthentifier avec le couple login/password soit justement utiliser un refresh token à usage unique. L’access token est utilisé uniquement pour accéder aux ressources, tandis que le refresh token est quant à lui uniquement utilisé pour récupérer un nouveau access token.

  6. Hello,

    Super tuto merci !
    Juste une question bête, les tokens : AccessToken & RefreshToken peuvent être stockés côté serveur en base de données ?
    Faut-il les stocker en clair ou peut-on ajouter un chiffrement (Blowfish en php) ?

    Merci !

  7. Bonjour, dans le cas d’une appli dispo pour le public, je ne vois pas comment se prémunir du spam si un hacker decompile l’appli. Merci

Post a Comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.