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?
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. –
"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. –