9
votes

Authentification avec client et serveur séparé

J'ai créé une application Web en angulaire 2 pour le côté client et Nodejs avec EXPRESS Cadre pour le côté serveur.

Pour le côté client, j'ai généré le projet avec angular-cli qui fonctionne sur un lite-serveur , mon client et mon serveur fonctionnent sur 2 services différents.

Je veux intégrer ADFS authentification. Pour mettre en œuvre l'authentification, j'utilise Passport-saml package. Il y a un middleware dans mon API qui nécessite un utilisateur d'authentifier.

Le processus d'authentification fonctionne correctement lorsque vous atteignez le serveur directement (sans le client).

Cependant, je ne parviens pas à accéder au API via le @ angulaire / http . J'ai essayé un simple obtenir la demande à partir du serveur (avec le middleware dans le point final) et, par conséquent, je reçois la page d'authentification sans redirection (je ne pense pas que ce soit le problème de base, mais la mise en œuvre réelle est).

Comment dois-je implémenter correctement l'authentification lors de l'utilisation de services distincts sur le serveur et le client?


1 commentaires

@ Ron537_ Avez-vous eu une solution utile?


3 Réponses :


0
votes

Vous n'abandonnez pas beaucoup de détails sur la réponse échouée lorsque le client a effectué le serveur. Était-ce un 400? 401? 404? 500? Avez-vous eu une erreur de Cors?

Pourquoi utilisez-vous obtenir votre point d'extrémité de connexion? Vous devez afficher des informations d'identification dans la charge utile postale?

Quoi qu'il en soit, dans votre code angular2, vous devez disposer d'un service d'authentification avec une méthode de connexion. La méthode de connexion doit faire quelque chose comme .. xxx

Vous pouvez alors vous abonner à l'observable renvoyé par la méthode de connexion et si tout est bon routeur.navigater à la page d'accueil ou si ce n'est pas allée bien afficher des messages d'erreur de connexion.


0 commentaires

2
votes

Bonjour, je faisais également face au même problème que mon projet angulaire a été hébergé sur 4200 ports. et mon nœud sur 3000 ports. C'est difficile à mettre en œuvre un passeport lorsque nous avons 2 ports en cours d'exécution.

Étape 1 Faire des projets angulaires statiques en faisant une construction NG dans le dossier public. Assurez-vous que angular-cli.json a * "surpasser": "../public".*</pode ">> Maintenant, nous pouvons utiliser le même port de nœud pour accéder aux racines angulaires Veuillez ajouter un code ci-dessous dans votre nœud app.js xxx

Ceci permettra à votre projet angulaire accessible via le port de nœud.

Étape 3: Maintenant, nous pouvons ajouter le bouton de connexion passeport dans l'interface utilisateur. et donnez l'URL twitter

Ce n'est pas des moyens explicatifs de me demander les doutes.


2 commentaires

Votre solution fonctionnerait, mais mon objectif était de séparer le client du serveur et de ne pas les combiner ensemble sur le même port. Ce que j'ai fait est que j'ai utilisé iframe pour connecter le client directement à la page d'authentification du serveur, c'est-à-dire / auth / authentification, puis après l'authentification réussie de l'utilisateur, j'ai utilisé le moteur EJS pour rendre les données utilisateur dans le Page et le transmis au client (en dehors de l'iframe) avec parent.postMessage. De cette façon, je peux garder le client et le serveur sur différents ports et authentification des archives avec passeport.js.


Je suis également à la recherche d'un client et d'un serveur séparé. La combinaison du client et du serveur sur le même port n'est pas une solution pour moi aussi.



0
votes

Définissez des URL séparées pour UI et serveur dans ..src / environnements / environnement.ts xxx

dans le nœud app.js xxx


5 commentaires

PASSPORT.JS sera-t-il Traitez-le comme le même domaine? et qu'en est-il de la session .


Je ne suis pas sûr de ça. Je l'ai utilisé dans mon application avec angular2 et nœud.js qui fonctionne bien.


Avez-vous écrit n'importe quel code permettant de permettre aux demandes de domaine (Cors) dans votre express app.js fichier?


app.use (fonction (req, res, résolution suivante) {res. red.header ("Access-Control-Autory-Origine ',' * '); Res.Header (" Access-Control-Autory-Headers' ", ' Origine, X-demandé-with, type de contenu, accepter, autorisation '); res.sethader ("Access-Control-Autory-Méthodes", "Get, Post, Mettez, Supprimer'); res.Setheader ('" Access- Control-max-Âge ', 60 * 60 * 24 * 7); suivant ();});


Je ne pense pas que cela résoudra le vrai problème. Le problème est que express-session fonctionne correctement dans le même domaine (client 3000 et serveur également 3000) mais dans le domaine différent (client 4200 et serveur 3000), il ne fonctionne pas bien. Il génère une nouvelle session sur chaque nouvelle demande et ne persiste pas la même session pour l'authentification de l'utilisateur.