Sie die Callback-URL zu dem Authentifizierungsdienst zur Verfügung stellen, können Sie entscheiden, ob Sie die Route durch die SPA oder die API behandeln. Oauth-Authentifizierung (vereinfacht) hat zwei Schritte. Illustration auf GitHub:
Schritt 1) https://github.com/login/oauth/authorize?client_id=*YOUR_CLIENT_ID*$redirect_uri=*YOUR_REDIRECT_URI*
öffnet ein Popup-Dialogfeld, das die Benutzer fordert Ihre Anwendung zu genehmigen, wenn sie erfolgreich wieder in Ihre redirect_uri mit einem Abfrageparameter code = AUTHORIZATION_CODE
Schritt 2)? Sie tauschen den obigen AUTHORIZATION_CODE für einen Langzeitzugriffstoken über https://github.com/login/oauth/access_token
aus. In Ihrer Architektur sollten Sie Schritt 1 im SPA und Schritt 2 in der Rest-API durchführen. Sie sollten sich auf den Spa verlassen, um den Autorisierungscode vom Authentifizierungsanbieter zu erhalten, ihn an Ihre Rest-API zu senden, den Rest an ein Long-Term-Access-Token zu übergeben, dieses Token in der Datenbank zu speichern, es zum Abrufen von Benutzerinformationen zu verwenden was auch immer Sie wollen, dann loggen Sie sich in den Benutzer ein.
Für Schritt 1 müssen Sie nur den CLIENT_ID für Schritt 2 CLIENT_ID und CLIENT_SECRET als gut, so können Sie Ihre Anwendung sicher halten, indem nur die CLIENT_SECRET auf der Serverseite zu speichern.
Das Problem mit der Callback-URI von Ihrem Rest API behandelt, ist, dass die Callback-URI vom Authentifizierungsanbieter (in diesem Fall GitHub) und nicht von Ihrem SPA aufgerufen wird, daher können Sie keine Antwort senden, die umleitet der Benutzer auf der Startseite. Dies würde nur funktionieren, wenn Ihre Vorlagen und Ihr Routing auf der Serverseite behandelt würden, was in Ihrer Architektur nicht der Fall ist.
Es ist nicht klar, aus der Dokumentation, aber wenn Sie eine Pass-Middleware auf einer Strecke wie app.post('/login', passport.authenticate('github'),
registrieren, prüft die Middleware, wenn die ‚Code‘ Abfrage param eine AUTHORIZATION_CODE enthält, wenn nicht, es tritt weg Schritt 1, wenn ja Schritt 2.
Dank Marton, aber in Schritt 2, SPA sendet Token zurück zu Ruhe api, wie kann Ruhe api es überprüfen? weil wir den Postboten verwenden können, um ein ungültiges Token zu posten, um api zu ruhen. –
Ich bin mir nicht sicher, ob ich das verstehe. Welches Token und warum willst du es verifizieren? – marton