Authentifizierung mit getrenntem Client und Server

8

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?

    
Ron537 19.02.2017, 09:55
quelle

3 Antworten

2

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",*

hat

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>

ein

Dies ist nicht erklärend bedeutet, dass Sie mich die Zweifel fragen.

    
Lijo 01.10.2017 03:34
quelle
0

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.

    
danday74 26.03.2017 04:09
quelle
0

Setzen Sie separate URLs für ui und Server in ..src / environments / environment.ts

%Vor%

Im Knoten app.js

%Vor%     
Shiha Mohan 12.12.2017 07:35
quelle