2017-10-20 56 views
1

Je suis en train de mettre en place un moyen sécurisé pour le frontend de communiquer avec le backend en utilisant une clé secrète. Le back-end est un service sensiblesignature des appels api de frontend à backend

D'abord, je pensais JWT, mais l'approche basée sur les jetons a deux inconvénients (services bancaires mobiles.):

a) l'extrémité avant doit obtenir le jeton, cela signifie qu'il doit envoyer des données d'authentification au back-end - et si le serveur frontal peut le faire, n'importe qui peut le faire. B) même s'il existe un moyen sécurisé d'obtenir le jeton, tout le monde peut lancer les outils de développement Chrome et l'utiliser tant qu'il n'a pas expiré. Par conséquent, l'approche alternative consiste à signer chaque demande à partir d'une interface avec une clé secrète. La clé est connue pour back-end et front-end, le front-end est regroupé et uglified afin de garder la clé secrète. Nous concaténons l'URL de la requête et sa charge utile, les chiffrons avec une clé secrète et envoyons le hachage résultant dans un en-tête. Le back-end obtient la requête, fait le même cryptage et compare les en-têtes; si elles sont égales - il fait la demande.

Cela me conduit à trois questions:

  • Est-ce que cela signifie vraiment que même si la demande est renifla ne peut être reproduit à moins que l'url + charge utile est le même? Y a-t-il quelque chose qui me manque?

  • Y a-t-il une bibliothèque JS implémentant cette approche? (ou peut-être quelque chose pour le backend aussi - j'utilise Django)

  • Y a-t-il une meilleure approche?

+0

Cette approche n'est pas particulièrement sûre: c'est la sécurité par obfuscation. Bien que la clé soit cachée dans la partie frontale à cause d'une uglification, elle est toujours là pour trouver si elle essaie assez fort ... – user184994

+0

Plutôt que de lancer votre propre solution, pensez à utiliser quelque chose d'expérimenté comme OAuth. Il existe des bibliothèques/kits d'outils disponibles pour le frontend et le backend (Django OAuth Toolkit) – AndrewS

+0

Les JWT font exactement ce que vous essayez de recréer mais de manière beaucoup plus sécurisée. Si votre secret est du côté du client, il est trivial de le comprendre. – Trickycm

Répondre

2

Bundle que vous voulez, si votre clé de sécurité qui autorise la demande est à l'intérieur js i sera en mesure de non enlaidir (embellissent) et l'obtenir. Utiliser SSL pour chiffrer la connexion et il suffit d'utiliser JWT;)

http://jsbeautifier.org/

Vous devrez autoriser l'utilisateur en quelque sorte de toute façon, donc cela signifie que l'envoi de données privées pour établir la « session ». Que ce soit un nom d'utilisateur, un courriel, un mot de passe ou un jeton «secret».