2017-04-07 2 views
0

Ich habe einen benutzerdefinierten OAuth 2.0-Authentifizierungsserver neben meiner gesicherten API implementiert. Ich habe auch eine einzelne Seite Anwendung als statischer Inhalt durch eine Nginx-Bereitstellung geliefert. Ich bin jetzt mit der Frage konfrontiert, wie man Benutzer dieses SPA authentifizieren kann, ohne ein aktives Backend, über das man eine Passwort-Zuteilung ausführen kann - ich kann das Client-Geheimnis natürlich nicht in das SPA einbetten.Benutzer über OAuth 2.0 von einem vertrauenswürdigen SPA authentifizieren?

Welche Lösungen gibt es für ein solches Problem?

Ich habe festgestellt, dass die Ressourcen-Besitzer Passwort Anmeldeinformationen gewähren kann genau das, was ich suche. Wenn ich dies nutze, wäre ich in der Lage, Benutzername und Passwort direkt von meinem vertrauenswürdigen SPA unter Verwendung einer bestehenden Client-ID zu senden. Wenn ich diese Berechtigung auf diesen bestimmten Client beschränken und den Ursprung der Anfrage validieren kann, kann dies ein vernünftiger Kompromiss sein.

Meine Frage wird dann, wie erstelle ich diesen Client und den erforderlichen zugehörigen Benutzer? Bedeutet das nicht, dass es in meinem System ein spezielles Benutzerkonto mit diesem zugehörigen privilegierten Client gibt? OAuth 2.0 scheint zu implizieren, dass Clients mit einem beliebigen Benutzer verknüpft sein müssen. Initiiere ich diese speziellen Benutzer- und Clientobjekte, wenn meine Anwendung bereitgestellt wird? Ist das sicher?

+0

Haben Sie den impliziten Fluss überprüft? Das ist das, was normalerweise für SPAs verwendet wird. –

+0

@ JánHalaša, ich habe ja. Dies war meine ursprüngliche Annahme, aber ich glaube, dass dies noch eine Umleitung für den Endbenutzer erfordert, ist das nicht korrekt? – DaveStance

+0

Ja, zuerst leiten Sie Ihren Benutzer an den OAuth2-Server und dann zurück an die von Ihnen angegebene redirectUrl. Sie erhalten ein Zugriffstoken im Hash-Teil der Weiterleitungs-URL. Gibt es ein Problem mit der Weiterleitung? –

Antwort

0

Ich denke, der implizite Fluss könnte gut verwendet werden.

  1. Benutzer wird vom SPA zum Server
  2. Benutzer Authentizität
  3. Benutzer ist

, Für die serverseitige API zusammen mit Token zurück zum SPA weitergeleitet prüft OAuth2 umgeleitet Sie Sie müssen entscheiden, ob Sie Zugangstoken oder ID-Token verwenden möchten (OpenID Connect - OAuth2-Erweiterung).

Wenn Benutzerberechtigungen für die API auf dem OAuth2-Server gespeichert sind, fragt der SPA möglicherweise einen Benutzer nach bestimmten Berechtigungen ab, die im Zugriffstoken enthalten sein werden. Dies ist eine Berechtigungsdelegierung und kann nützlich sein, wenn mehrere Anwendungen unterschiedliche Berechtigungen erfordern.

Wenn der OAuth2-Server die Berechtigungen nicht besitzt und die API diese selbst verwaltet, ist es wahrscheinlich besser, ID-Token zu verwenden, da sie die Identität des Aufrufers darstellen und ohne Zugriff auf den OAuth2-Server überprüft werden können.

Die API muss wahrscheinlich nicht ihre client_id haben, da sie nur Tokens akzeptiert - sie fordert sie nicht an - es überprüft, dass Zugriffstoken Berechtigungen für Aktionen enthalten, die Benutzer aufrufen oder ID-Tokens validieren.

Das SPA muss seine client_id mit registrierten redirect_uri-s haben. Kein Client-Geheimnis erforderlich, da SPA-s sie nicht sicher aufbewahren können. Es muss mithilfe von HTTPS bereitgestellt werden, um die übertragenen Tokens zu sichern.

Verwandte Themen