L'authentification avec AngularJS, gestion de session, les questions de sécurité avec l'Api REST WS
J'ai commencé à développer une application web avec angularJS et je ne suis pas sûr que tout est sécurisé (côté client et serveur).
La sécurité est basée sur une seule page de connexion, si les informations d'identification sont vérifiées ok, mon serveur renvoie un jeton unique personnalisé avec le temps de validité. Tous les autres api REST sont accessibles par le biais de ce jeton.
L'application (client) accédez à mon point d'entrée ex: https://www.example.com/home.html utilisateur d'insérer des informations d'identification et de récupérer un jeton unique. Ce jeton unique sont stockées dans le serveur de base de données avec l'algorithme AES ou d'autres sécurisé techniques, il n'est pas stocké en format clair.
À partir de maintenant, mon AngluarJS application va utiliser ce jeton pour s'authentifier auprès de toutes les Api REST exposés.
Je pense temporaire stocker le jeton personnalisé dans un cookie http; en principe, lorsque le serveur vérifie les informations d'identification, il envoie en retour un nouveau témoin Ex.
app-token : AIXOLQRYIlWTXOLQRYI3XOLQXOLQRYIRYIFD0T
Le cookie sécurisé et HTTP Uniquement drapeaux sur.
Le protocole Http de gérer directement le nouveau cookie et de le stocker. Les demandes successives sera présente le cookie avec le nouveau paramètre, sans la nécessité de gérer et de le stocker avec javascript; à chaque requête, le serveur invalide le jeton et génère un nouveau et l'envoie au client --> prévenir replay-attaque avec un seul jeton.
Lorsque le client reçoit un code d'état HTTP 401 non autorisé réponse de toutes les Api REST, l'angle de contrôleur de nettoyer les cookies et rediriger l'utilisateur vers la page de connexion.
Devrais-je envisager d'autres aspects? Est-il préférable de stocker le jeton à l'intérieur d'un nouveau cookie ou dans localStorage?
Des conseils sur la façon de générer un unique fort jeton?
Modification (amélioration):
- J'ai décidé d'utiliser l'algorithme HMAC-SHA256 comme générateur de jeton de session, avec 20 minutes de validité. Je la génération aléatoire d'32byte GUID, joindre un horodatage et de calculer le HACHAGE SHA256 en fournissant un 40 octets de la clé. Il est tout à fait impossible d'obtenir des collisions depuis le jeton de validité est tout à fait minime.
- Cookie sera domaine et le chemin d'accès attributs pour augmenter la sécurité.
- Pas de multi-connexions sont autorisées.
- Vous avez déjà semblent être, mais juste pour faire comprendre à quelqu'un d'autre - toujours utiliser le protocole https sinon, le nom d'utilisateur/mot de passe sera envoyé en texte brut.
- J'ai une question peut être simple. Quand vous dites client reçoit un code d'état HTTP 401 de repos, vous êtes le nettoyage et la redirection vers la page de connexion. Donc quelque part dans votre code, vous aurez une sorte de condition if pour la réponse.statut 401. Maintenant en mode de débogage nous pouvons la changer, comment gérez-vous cela? Ou est-il une possibilité que n'importe quel pirate peut utiliser un plug-in de changement de statut de la réponse http du code?
- Vous ne pouvez rien faire sur le côté client. Vous pouvez modifier l'état http 401 à 200 à l'état http et qu'? Vous pouvez l'ingénierie inverse l'angle de code et d'atteindre une page qui va faire une demande à un service rest qui réplique avec un autre 401 🙂 la chose La plus importante est de sécuriser le côté serveur et rendre difficile ou impossible pour un attaquant d'appel reste WS avec un faux session ou sans session. J'ai donc le manipuler par la vérification de la session sur tous les reste WS et de répondre à la ressource que si la session est valide.
Vous devez vous connecter pour publier un commentaire.
Si vous parlez au serveur via le protocole https, vous n'avez pas de problème avec les attaques de relecture.
Ma suggestion serait de tirer parti de votre serveur de sécurité de la technologie. Par exemple, JavaEE a un out-of-the-box mécanisme de connexion, déclaratif basé sur le rôle de la protection des ressources (votre REPOS des points de terminaison) etc. Ce sont tous gérés avec un ensemble de cookies, et vous n'avez pas de soins sur le stockage et la date d'expiration. Découvrez ce que votre serveur/cadre vous donne déjà.
Si vous prévoyez d'exposer votre API à un public plus large (pas spécialement pour le navigateur de base de l'INTERFACE utilisateur que vous servez) ou d'autres types de clients (par exemple, application mobile), d'envisager d'adopter le protocole OAuth.
Sur le dessus de ma tête, Angulaire a les caractéristiques suivantes (va ajouter plus comme ils pop-out):
CSRF/XSRF attaques
Angulaire prend en charge la sortie de la boîte de mécanisme pour CSRF de protection. Découvrez
$http
docs. Côté serveur, le soutien est nécessaire.Contenu De La Politique De Sécurité
Angulaire dispose d'un mode d'évaluation de l'expression qui est compatible avec la plus stricte exécution JavaScript qui sont appliquées lorsque CSP est activé. Découvrez
ng-csp
docs.Stricte Contextuelle S'Échapper
Utilisation Angulaire du nouveau
$sce
fonctionnalité (1.2+) pour durcir vous de l'INTERFACE utilisateur contre les attaques XSS etc. C'est un peu moins pratique mais plus sûr. Découvrez les docs ici.C'est côté client de sécurité que vous pouvez mettre en œuvre régulièrement Angulaire versions.
J'ai essayé et testé cette.
(S'il vous plaît trouver mon article ici:- http://www.codeproject.com/Tips/811782/AngularJS-Routing-Security )
En outre, à côté client voie de la sécurité, vous avez besoin pour sécuriser l'accès au serveur de côté également.
Côté Client, de sécurité permet d'éviter les extra aller-retour vers le serveur. Cependant, si quelqu'un à des astuces le navigateur , le serveur de côté de serveur de sécurité doit être en mesure de refuser l'accès non autorisé.
Espérons que cette aide!
Étape 1: Définir des variables Globales dans l'app-module
-définir des rôles pour l'application
-Définir l'itinéraire Pour les Accès non autorisés pour l'application
Étape 2: Définir le service d'autorisation
Étape 3: Utiliser la sécurité de routage: Permet d'utiliser tous nos hardword fait jusqu'à présent, pour sécuriser les routes
Tout d'abord, il n'y a pas de court ou seulement une réponse à ce que vous avez demandé. En plus de ce qui a déjà été répondu, je vais essayer d'ajouter quelque chose de plus. Au niveau de l'entreprise , il y a quatre composantes principales ,
Extension:Siteminder Authentification
SiteMinder les Cookies, leur Utilisation, de Contenu et de Sécurité
La construction d'une Java serveur d'authentification pour Chatkit
Son meilleur que vous déployez & gérer ces quatre composantes indépendamment pour une meilleure échelle . par exemple, dans cet article, ils ont mélangé l'authentification & token de génération dans l'unique point de fin & c'est pas bon - Microservices avec Spring Boot — Authentification avec JWT (Partie 3)
Par votre écriture, il semble que vous avez écrit composant de deux & trois sur votre propre, généralement les gens utilisent des outils comme CA SiteMinder - Comment CA Siteminder œuvres – notions de base
Je vous suggère d'aller par moyen standardisé pour une meilleure maintenabilité & la sécurité, c'est à dire que vous choisissez JWT format. JSON Web Jeton (JWT) Schéma d'Authentification
Votre jeton sera signé & crypté de sorte que vous aussi, Vous avez besoin d'un serveur de clés de chiffrement & un mécanisme pour faire tourner ces touches à intervalles réguliers.
JSON Web Jetons - Comment stocker de manière sécurisée les clés?
Quelle est la différence entre JWT et de chiffrer certaines json manuellement avec AES?
CA personne a joint un pdf détaillé guide sur ce portail de la communauté - qui vous aidera à comprendre le flux global.
Exemple de Code /l'Application à utiliser de REPOS JWT jeton API
Votre code API aura besoin de récupérer la clé de cryptage et de déchiffrer & décoder le jeton pour authentifier jeton. Si le jeton est altéré ou manquant, vous devez le signaler comme tel. Il existe des bibliothèques disponibles pour cela.
local de Stockage si UI & API sont sur différents domaines & Cookies si sur le même domaine.
Devrait JWT être stockés dans localStorage ou de biscuits?
Inter-Domaine Cookies
Sécurité d'une application dépend aussi du modèle de déploiement et que vous n'avez pas spécifié dans votre question. Parfois , les développeurs pourraient laisser comme simple failles dans leur code que l'Injection SQL 🙂
Que faire si JWT est volé?