web-dev-qa-db-fra.com

Ajout d'en-têtes http à window.location.href dans Angular app

J'ai une application angular que je devais rediriger à l'extérieur vers une page non angular html, donc j'ai pensé que je pouvais simplement utiliser le $window.location.hrefpour rediriger l'application angular vers mon site externe. Cela fonctionne en fait très bien, cependant, j'ai un backend nodejs/express qui vérifie le jeton d'authentification avant de servir tout contenu (même le contenu statique).

Cela nécessite l'envoi d'un jeton d'authentification dans l'en-tête de la requête http. Maintenant la question:

Pouvez/comment ajouter un jeton d'authentification à la demande qui est effectuée en modifiant le $window.location.href avant son envoi?

24
britztopher

Lorsque vous utilisez $window.location.href c'est le navigateur qui fait la requête HTTP et non votre code JavaScript. Par conséquent, vous ne pouvez pas ajouter un en-tête personnalisé comme Authorization avec votre valeur de jeton.

Vous pouvez ajouter un cookie via JavaScript et y placer votre jeton d'authentification. Les cookies seront automatiquement envoyés depuis le navigateur. Cependant, vous souhaiterez examiner les implications de sécurité de l'utilisation d'un cookie par rapport à un en-tête. Étant donné que les deux sont accessibles via JavaScript, il n'y a pas de vecteur d'attaque supplémentaire. Sauf si vous supprimez le cookie après le chargement de la nouvelle page, un exploit CSRF peut être disponible.

28
Kevin Hakanson

J'utilise JWT comme authentification sur un Laravel PHP backend, et cela fonctionne en mettant ?token=... Dans l'URL. Par exemple, lorsque vous utilisez AngularJS avec plug-in satellizer, j'ajoute ?token=' + $auth.getToken() à l'URL.

Je l'utilise strictement pour les appels API, en utilisant SSL. Sachez que ce n'est peut-être pas un moyen d'authentification sécurisé dans votre cas d'utilisation.

2
Innovaat