2016-05-06 14 views
2

-I eine SPA-Anwendung in JavaScipt
-A WebAPI Service .net -A Token-Service in einem gleichen Projekt .net hatdie Oauth Fluss für Token Authentifizierung gut mit JavaScript SPA

Problem 1

Spa-Anwendung eine Ajax-Anfrage an Token-Endpunkte mit Grant_type Passwort. Im Gegenzug erhält es ein Token zurück, das im lokalen Speicher gespeichert wird und später zur Authentifizierung von Webapi verwendet wird. 1. Ist dies der richtige Ansatz für die SPA-Authentifizierung? 2. Ist die Passwortvergabe korrekt? oder ich muss einen anderen Fluss verwenden, um es sicher zu machen. In oauth Dokumenten geschrieben es sollte nicht verwendet werden. 3 Ich bin besorgt über die Sicherheit des Tokens, da es einfach kopiert und eingefügt werden kann. Wie man es sichert?

Problem 2 Individuelle SSO mit Token Service

Jetzt habe ich eine andere Anwendung derselben Architektur. Wie Anwendung A und B. Verwendet die gleiche Architektur. Ich möchte Token-Service der Anwendung A verwenden, um ein Token an Anwendung B ausgibt, um sich in Anwendung B zu melden.

Token von A für Anwendung B kann entschlüsselt werden und ich kann Benutzeridentität erstellen.Wie können wir uns anmelden Anwendung B als auch folgt einem Token-basierten Ansatz. So, hier sollte ich dich ein, um Anwendung B durch eine neue lokale accesstoken Schaffung ausgegeben selbst unter Verwendung von Informationen von Token durch Anwendung A. ausgegeben

Antwort

2
  1. Ist das der richtige Ansatz für SPA-Authentifizierung? 2. Ist die Art der Passwortvergabe korrekt? oder ich muss einen anderen Fluss verwenden, um es sicher zu machen. In oauth Dokumenten geschrieben es sollte nicht verwendet werden.

Verwenden des Ressourceneigentümer Erteilung Kennwortdaten in Ordnung ist, wenn Sie Ihre eigene Anwendung zu entwickeln, sondern besiegt den ganzen Zweck der OAuth2, wenn sie mit Drittanbieter-Client-Anwendungen verwenden, da es der einzige Fluss ist, wo das Benutzerpasswort ist direkt an die Client-Anwendung ausgesetzt (die das Prinzip der geringsten Rechte bricht). Wenn Sie stattdessen den Autorisierungscode oder den impliziten Fluss verwenden möchten, ist dies nicht unbedingt "sicherer" und wird von Benutzern, die nach einer einfachen "Token-Alternative" zur Kennwortauthentifizierung suchen, oft als Overkill angesehen.

3 Ich bin besorgt über die Sicherheit von Token, da es einfach kopiert und eingefügt werden kann. Wie man es sichert?

Da Sie eine JS-Anwendung entwickeln, können Bearer Tokens vom Benutzer direkt aufgerufen werden. Sie können nichts dagegen tun (es ist vergleichbar mit der Sicherheitsstufe von Cookies, die einfach kopiert und vom Benutzer selbst in eine andere Umgebung verschoben werden kann).

Um Zugriffs-/Aktualisierungstoken gegen Remote-Angreifer zu schützen, müssen Sie lediglich sicherstellen, dass Ihre JS-Anwendung nicht von einer XSS-Verletzung betroffen ist, die Diebstahl oder böswillige API-Aufrufe im Namen des Benutzers ermöglichen würde.


So, hier sollte ich anmelden B-Anwendung durch eine neue lokale accesstoken Erstellung selbst ausgegebenen Informationen von Token durch Anwendung A. ausgegeben mit

SSO wird nicht wirklich funktionieren mit nicht-interaktiven fließt wie der Berechtigungsnachweis des Ressourceneigentümerkennworts, da der Benutzer nicht in diesem Ablauf beim Autorisierungsserver angemeldet ist (dh bei einer Anforderung grant_type=password wird kein Sitzungscookie erstellt).

Sie sollten in Erwägung ziehen, einen zentralen Autorisierungs-/Authentifizierungsserver einzurichten, der einen interaktiven Fluss wie den Autorisierungscode oder den impliziten Fluss unterstützt, um dieses Szenario zu unterstützen.

+0

vielen Dank Pinpoint. Ich schätze, dass Sie auf diesem – harmeet

+0

geholfen haben, wenn ich mich am Authentifizierungsserver anmelde, möchte ich mich gleichzeitig bei allen Anwendungen anmelden. Wie Anwendung A, B und C. Bei der Anmeldung möchte ich Daten von allen Anwendungen holen und sie in Anwendung A zeigen. Irgendein Hinweis darauf, wie ich dies mit oauth oder openid erreichen kann – harmeet