2016-05-18 12 views
0

Ich benutze IdentityServer3, aber ich bin mir nicht sicher, ob es ein Problem dort oder mit OAuth2 allgemein oder nur mein Verständnis davon ist.OAuth2 Bereich Klärung benötigt

tl:dr 

How do I allow my user to have different claims in each app using single-sign-on? 

Hier ist ein Szenario:

I Single-Sign-on über eine Suite von Anwendungen anordnen möchten, damit ich eine Identität Server (nennen wir es IdSvr) und ein paar Client-Anwendungen (lässt Anruf sie AppA und AppB).

AppA muss die Profilinformationen, E-Mail-Informationen und einige AppA-spezifische Daten des Benutzers kennen. AppB muss die Profilinformationen, E-Mail-Informationen und einige AppB-spezifische Daten des Benutzers kennen. Um dies zu unterstützen, richte ich in IdSvr Bereiche ein, in denen die anwendungsspezifischen Ansprüche aufgeführt sind: Der Geltungsbereich "ScopeA" umfasst die Ansprüche "A01", "A02" usw. und der Geltungsbereich "ScopeB" umfasst die Ansprüche "B52", "B53" usw. Jetzt

wenn AppA muss mein Benutzer authentifizieren er eine Anfrage an IdSvr fordern „openid Profil E-Mail ScopeA“ macht und ein Token zurückkommt, die die geforderten Ansprüche erhält, einschließlich der „A01“, „A02“ usw.

Wenn mein Benutzer zu AppB geht, stellt er fest, dass er authentifiziert ist, also erhält er nur die bereits erhaltenen Ansprüche. Es gibt keine "B01", "B02" usw., da AppA, wenn die Authentifizierung gestartet wurde, nicht nach ScopeB gefragt hat.

In diesem Fall muss ich den Benutzer abmelden und eine erneute Authentifizierung einschließlich ScopeB anfordern, um ScopeB-Ansprüche zu erhalten.

Wenn mein Benutzer zu AppA zurückkehrt, sind seine ScopeA-Ansprüche verloren gegangen, obwohl er noch authentifiziert ist.

Ich erwartete die Scope-Funktion, um Ansprüche getrennt zu halten, so dass AppB-spezifische Ansprüche die AppA-Nutzung nicht beeinträchtigen und umgekehrt. Ich erwartete auch, dass AppB in der Lage sein würde, eine eigene Anfrage zu stellen und nach ScopeB zu fragen, wenn die bestehende Authentifizierung es nicht enthielt.

Habe ich missverstanden? Soll ich bei der Erstauthentifizierung ein Token erhalten, das Zugriff auf alle Ansprüche des Nutzers gibt, und jede Verbraucher-App dafür verantwortlich machen, dass sie Dinge ausfiltert, die sie nicht benötigt oder nicht einholen sollte? Was wäre dann der Sinn des Geltungsbereichs?

Antwort

0

Der Identitätsserver speichert einen Cookie, so dass Sie bei zukünftigen Anfragen bereits authentifiziert sind. Anstelle eines Anmeldebildschirms gelangen Sie direkt zum Zustimmungsbildschirm (sofern eine Einwilligung erforderlich ist), dann werden basierend auf dem Umfang/Kunden Ihre Ansprüche und Ihr Token erstellt. Sie müssen sich nicht abmelden, um ein neues Token für AppB zu erhalten.

Wenn IdentityServer den Client zurückleitet, wird das Token über die Abfragezeichenfolge übergeben. Wie Sie dieses Token speichern, liegt ganz bei Ihnen.

Einige offensichtliche Optionen zum Zwischenspeichern des Tokens sind Cookies oder lokaler Speicher. Wenn sich jedoch beide Apps in derselben Domäne befinden und Sie den gleichen Schlüssel zum Zwischenspeichern/Abrufen von Token verwenden, ziehen Sie das Token zurück, das von AppA zwischengespeichert wurde, oder wenn Sie Token für AppB erhalten, könnte das AppA-Token überschrieben werden.

+0

OK, AppB möchte also einen Bereich, der nicht im gespeicherten Cookie enthalten ist, weil AppA nicht danach gefragt hat, also würde ich erwarten, dass IdSvr die Zustimmungsansicht für ScopeB anzeigt und dann Ansprüche zum Token hinzufügt. Ich bin verwirrt, weil jede App als ein bekannter Client mit zulässigen Bereichen definiert ist, was impliziert, dass jede App ein anderes Token erhält, aber in der Praxis scheint es, dass nur ein Token an alle Anrufer kopiert werden muss. –

+0

"Wenn beide Apps auf der gleichen Domain sind", wurde mir klar, dass ich mit AppA und AppB sowohl als Localhost an verschiedenen Ports arbeite, also natürlich auch den gleichen Cookie verwende.Ich habe meine Testclients auf verschiedene Domains verteilt, und jetzt bekommen sie separate Scoped Claims, wie ich es mir erhofft hatte. –