Ich habe eine Web-Anwendung in angular 2 für die Client-Seite und NodeJS
mit express
framework für die Server-Seite erstellt.
Für die Clientseite habe ich das Projekt mit angular-cli
generiert, das auf einem lite-server
ausgeführt wird, sodass mein Client und Server auf zwei verschiedenen Diensten ausgeführt werden.
Ich möchte ADFS
authentication integrieren.
Um die Authentifizierung zu implementieren, verwende ich passport-saml
package.
Es gibt eine Middleware in meiner Server-Seite API
, die einen Benutzer zur Authentifizierung benötigt.
Der Authentifizierungsprozess funktioniert einwandfrei, wenn der Server direkt (ohne den Client) erreicht wird.
Ich kann jedoch nicht auf API
über @angular/http
zugreifen.
Ich habe versucht eine einfache GET
Anfrage vom Server (mit der Middleware im Endpunkt) und als Ergebnis bekomme ich die Authentifizierungsseite ohne Umleitung (ich glaube nicht, dass es das Kernproblem ist, aber die eigentliche Implementierung ist) .
Wie sollte ich die Authentifizierung ordnungsgemäß implementieren, wenn Sie separate Dienste für den Server und den Client verwenden?
Hi, ich hatte auch das selbe Problem, dass mein eckiges Projekt auf dem Port 4200 gehostet wurde. und mein Knoten am 3000 Port. Es ist schwierig, einen Pass zu implementieren, wenn 2 Ports laufen.
Schritt 1
Machen Sie ein eckiges Projekt statisch, indem Sie einen NG-Build zu einem öffentlichen Ordner machen.
vergewissere dich, dass angular-cli.json
*"outDir": "../public",*
Schritt 2 Jetzt können wir den gleichen Knoten-Port verwenden, um auf eckige Wurzeln zuzugreifen, fügen Sie bitte den folgenden Code in Ihren Knoten app.js
ein %Vor%Dadurch wird Ihr eckiges Projekt über den Knotenport zugänglich gemacht.
Schritt 3:
Jetzt können wir die Pass Login-Schaltfläche in der Benutzeroberfläche hinzufügen
und gib die URL <a href="/passport/auth/twitter">twitter</a>
Dies ist nicht erklärend bedeutet, dass Sie mich die Zweifel fragen.
Sie geben nicht viele Details darüber, was die fehlgeschlagene Antwort war, als der Client das GET auf den Server ausgeführt hat. War es eine 400? 401? 404? 500? Haben Sie einen CORS-Fehler erhalten?
Warum verwenden Sie GET für Ihren Anmeldeendpunkt? Sie sollten Anmeldeinformationen direkt in der POST-Payload POST sein?
Wie auch immer, in Ihrem angular2-Code sollten Sie einen Auth-Dienst mit einer Login-Methode haben. Die Login-Methode sollte etwas wie ..
tun %Vor% Sie können dann das von der Login-Methode zurückgegebene Observable abonnieren und wenn alles gut ist router.navigate
auf die Homepage oder, falls es nicht gut ging, Login-Fehlermeldungen anzeigen.
Setzen Sie separate URLs für ui und Server in ..src / environments / environment.ts
%Vor%Im Knoten app.js
%Vor%Tags und Links authentication node.js angular passport.js client-server