Sécuriser un token dans une base de donnée

a marqué ce sujet comme résolu.

Bonjour à tous!

Je développe une application où j’ai besoin d’utiliser un service tier qui me retourne un token d’accès. J’ai besoin de stocker ce token en base de donnée car l’application charger doit certaines informations à son lancement et pour éviter que l’utilisateur ait à saisir son identifiant et mot de passe pour se connecter au service tier à chaque fois.

Seulement stocker un token comme il est en base de donnée me paraît trop peu sécurisé car j’y ait personellemet accès, de plus si quelqu’un arrive à accèder au système il y aura également accès. Il m’a paru alors nécessaire de devoir l’encrypter en utilisant une clé.

J’ai donc décidé d’encrypter le token en utilisant le mot de passe de l’utilisateur, seulement j’ai besoin de faire des appels d’API à différents moments et pour cela la clé (le mot de passe) dois être toujours accessible depuis le front end. J’envisage de le stocker dans le localStorage, mais ça veux dire que le mot de passe est clairement visible sur le navigateur et ce n’est pas recommandé.

Une autre solution auquelle j’ai pensé est de générer une clée unique pour l’utilisateur, la stocker en base de donnée et ensuite l’utiliser en tant que clée pour encrypter/décrypter les tokens. Mais cela veut dire que la clé sera accessible pour quelqu’un ayant accès à la base de donnée, de plus si je stocke la clé dans le localStorage je me retrouve dans la même situation qu’avec le mot de passe.

Je suis très confus sur la façon de faire afin que ce soit sécurisé. Quelqu’un a t-il déjà eu des cas similaires, que pourait être la solution?

J’utilise Node.js pour mon backend et le module crypto pour l’encryption.

Seulement stocker un token comme il est en base de donnée me paraît trop peu sécurisé car j’y ait personellemet accès, de plus si quelqu’un arrive à accèder au système il y aura également accès. Il m’a paru alors nécessaire de devoir l’encrypter en utilisant une clé.

Si je comprends correctement, c’est un token temporaire, le temps de travailler avec l’API. Alors pourquoi ce besoin de le stocker en premier lieu ? Si tu as besoin de l´API plus tard, tu redemandes simplement un nouveau token.

Idée : stocke simplement le token en RAM sur ton backend et assure-toi que ces tokens ont une validité courte auprès du service tiers, à défaut donne-leur une vie courte sur ton backend. Tout ce que pourra faire un tiers malveillant c’est pénétrer ton backend (ce qui est déjà censé être difficile, c’est la première règle d’or), et analyser la RAM pour retrouver les tokens, ce qui n’est pas facile non plus. Si toutefois il y arrive, la moitié de ces tokens seront expirés avant qu’il les exploite. Ne t’inquiète pas pour l’usage RAM, un token disons que c’est de l’ordre de 128 octets, même si mettons tu les stockes 5 minutes, avec 10000 utilisateurs / 5 min tu n’es qu’à 1 Mo en RAM par exemple. Tu peux ajouter des sécurités du style : toute connexion SSH à la machine déclenche la purge de tous les tokens stockés : si quelqu’un se connecte à ta machine, tout est effacé.

+0 -0

Seulement stocker un token comme il est en base de donnée me paraît trop peu sécurisé car j’y ait personellemet accès, de plus si quelqu’un arrive à accèder au système il y aura également accès. Il m’a paru alors nécessaire de devoir l’encrypter en utilisant une clé.

Si je comprends correctement, c’est un token temporaire, le temps de travailler avec l’API. Alors pourquoi ce besoin de le stocker en premier lieu ? Si tu as besoin de l´API plus tard, tu redemandes simplement un nouveau token.

sgble

Non le token est à longue durée car l’utilisateur peut faire différents appels qui nécessitent d’utiliser l’API tier.

Idée : stocke simplement le token en RAM sur ton backend et assure-toi que ces tokens ont une validité courte auprès du service tiers, à défaut donne-leur une vie courte sur ton backend. Tout ce que pourra faire un tiers malveillant c’est pénétrer ton backend (ce qui est déjà censé être difficile, c’est la première règle d’or), et analyser la RAM pour retrouver les tokens, ce qui n’est pas facile non plus. Si toutefois il y arrive, la moitié de ces tokens seront expirés avant qu’il les exploite. Ne t’inquiète pas pour l’usage RAM, un token disons que c’est de l’ordre de 128 octets, même si mettons tu les stockes 5 minutes, avec 10000 utilisateurs / 5 min tu n’es qu’à 1 Mo en RAM par exemple. Tu peux ajouter des sécurités du style : toute connexion SSH à la machine déclenche la purge de tous les tokens stockés : si quelqu’un se connecte à ta machine, tout est effacé.

Society

J’aimerais pouvoir garder les tokens aussi longtemps que possible pour éviter que l’utilisateur s’authentifie de nouveau.

Pour info, je suis en train de développer une app où l’utilisateur peut se connecter à ses réseaux sociaux afin d’obtenir certaines informations. La façon dont les tokens doivent être gérés doit donc être similaire à Hootsuite https://hootsuite.com/platform/monitoring

Ça fait pas mal de temps que j’utilise leur service (plus d’un an) et jusqu’à présent je n’ai jamais eu à m’identifier à nouveau sur Facebook, Instragram, etc. Je me demande donc comment ils font pour gérer les tokens et la sécurité.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte