web-dev-qa-db-fra.com

Meilleur moyen de sécuriser le site Web de l'architecture de fin de fin / de repos JavaScript?

Je voudrais construire le projet suivant:

  • public REST API Back Terminer qui peut être consulté par tout client authentifié.
  • front-fin avec des fichiers statiques dans HTML/CSS/JavaScript avec des appels jackbone.js jQuery vers le REST arrière.

En fait, il existe trois parties dans mon architecture: le front-end, qui est un client de l'arrière-plan, l'arrière-plan et l'utilisateur qui souhaite s'authentifier sur la page de connexion frontale.

Quelle est la meilleure façon de sécuriser les trois parties impliquées dans cette architecture?

En fait, je crois qu'il est tout simplement impossible de faire une application sécurisée à l'avant si je fais tout en JavaScript, j'ai donc l'intention de déléguer l'authentification/l'autorisation à une couche de proxy sur mon serveur avant.

Mon problème est que je ne sais pas comment effectuer ce flux de travail avec OAuth:

  • un utilisateur souhaite créer un compte à l'extrémité avant.
  • le front-end déléguez la création de compte au REST.
  • l'arrière-plan crée le compte et envoyez un ACK à l'avant.
  • ensuite, l'utilisateur peut effectuer des appels qui nécessitent une autorisation.

Et je veux aussi mon REST Back Terminez-vous à toute autre application tierce avec OAuth.

Devrai-je utiliser 2 pieds ou 3 patted OAuth sur le REST Back Terminez-vous?

Puis-je envisager mon front de fin, comme une application spéciale tierce partie qui a la possibilité de créer un compte d'utilisateur?

Quel protocole de sécurité pourrai-je utiliser sur le devant?

18
rico

Eh bien, puisque vous indiquez que le REST API ne peut être consulté que par des clients authentifiés, vous aurez d'abord besoin d'une forme de sessions pour mémoriser l'état d'authentification du client. Selon que vous puissiez modifier le serveur. Code du REST API que vous pouvez implémenter cela sur l'API fournissant un serveur lui-même.

Cela pourrait utiliser l'un des éléments d'authentification de l'utilisateur bien connus signifie une combinaison nom d'utilisateur/mot de passe ou à l'aide d'un certificat (auto-signé).

Cependant, comme avec http, vous devrez vous assurer que les mots de passe ne voyagent pas de la ligne en clairexuant et une fois que la session est authentifiée, la connexion ne doit pas fuir l'identifiant de session qui lui permet d'être détourné. Cela signifie fondamentalement que vous devez imiter le comportement de type SSL ou implémenter la prise en charge SSL pour votre front-end. Un exemple peut être trouvé ici: http://assl.sullof.com/assl/

Vos questions relatives au OAuth sont une question différente et je vous suggérerais de demander cela dans une question distincte s'il reste encore quelque chose que vous voulez savoir.

En ce qui concerne une couche proxy, il s'agit d'une option viable que tant que l'API n'est pas accessible au public autre que par un tel proxy. Cette couche de proxy devrait mettre en œuvre les mêmes propriétés de type SSL, mais cette configuration vous donne la fonction ajoutée de pouvoir conserver la logique d'authentification et le fournisseur d'API séparé. Cependant, je ne le recommanderais pas si vous êtes en mesure de modifier l'API, car si une partie de votre serveur fournit accidentellement l'accès à l'API privé, vous pouvez contourner vos exigences d'authentification.

2
Beanow