Ich bin fast herauszufinden, wie die verschiedenen Teile einer Authentifizierung und Autorisierung Server-Architektur arbeiten. Ich denke wirklich, dass IdentityServer eine großartige Software ist.IdentityServer 3 + Asp.net Identity: Bereiche, Ansprüche und Clients - Erläuterungen
Ich versuche meine Entdeckungen zusammenzufassen, um eine Basis für meine Fragen zu finden.
- IdentityServer gibt Token mit OpenID Connect aus. Ausgegebene Token sind ID-Token und Access-Token.
- Tokens werden - wie im OpenID Connect-Protokoll angegeben - mithilfe von OAuth 2.0-Flows an Clients angefordert. Ein Flow für jeden Kunden.
- Während des Flow-Beginns fordert der Client eine Sammlung von Bereichen an (mindestens "openid", da er angeben muss, dass ein OpenID Connect-Flow aktiviert wurde)
- Ein Client kann alle Bereiche fragen, ob er berechtigt ist Fragen. Mit dem Entity Framework-Plugin für IdentityServer sind diese Informationen in der ClientScope-Tabelle enthalten. Wenn der Client einen Bereich anfordert, den er nicht anfordern darf, wird der Ablauf unterbrochen.
- Bereiche können Ansprüche enthalten. Dies bedeutet, dass, wenn ein Bereich eine Gruppe von Ansprüchen enthält, dieser Token bei jeder Ausgabe eines Tokens durch den Client auch alle entsprechenden Ansprüche des Benutzers enthält. Zum Beispiel: Lassen Sie "Rollen" einen Bereich aufrufen, der den Anspruch "Rolle" enthält. Sobald der Client autorisiert ist, enthält das empfangene Token alle Benutzerrollen (als Ansprüche).
- Jeder angeforderte Bereich wird, sofern er autorisiert wurde, in einem Claim mit dem Namen "scope" "übersetzt". Dies bedeutet, dass, wenn ein Client beispielsweise einen definierten "api" -Bereich anfordert, die generierte Identität mindestens einen Anspruch namens "scope" mit dem Wert "api" haben wird.
Wenn alles, was ich geschrieben habe, mehr und weniger richtig ist, hier sind meine Fragen:
- wie sind Ansprüche auf asp.net Identität Tabellen definiert (dh AspNetUserClaims) mit den IdentityServer diejenigen . Für das, was ich gesehen habe, wird der Abgleich auf den Namen gemacht. Ist diese Schlussfolgerung richtig? Mit anderen Worten, wenn mein Kunde eine "Rolle" Ansprüche erhalten muss (weil er nach dem Bereich "Rollen" gefragt hat), wird das "Asp.Net Identity" Plugin für IdentityServer nur die für die Authentifizierten definierten "Rolle" Ansprüche freigeben Benutzer?
- Bezug nehmend auf die "EntityFramework" -Plugintabellen, was bedeutet die Tabelle "ClientClaims"? Ich kann nicht verstehen, wie Ansprüche direkt mit dem Kunden verbunden werden können ... Was fehlt mir?
nehmen wir an, dass in meinem Ressource-Server ich eine Aktion haben wie diese mit einem ResourceAuthorize Attribut geschützt:
[ResourceAuthorize ("Read", "Orders")]
In meinem AuthorizationManager ich prüfen Vorhandensein eines Anspruchs "order_read" oder eines Anspruchs "api". Dies sind zwei verschiedene Bereiche, die in meinem AuthorizationServer definiert sind, einer für "Order Reading" und der letzte für einen vollständigen API-Zugriff. Der erste kann von Drittkunden gestellt werden, während der zweite nicht. Ist das eine gute Übung?
Ich kann nicht verstehen, was mein Klient mit dem id_token tun sollte. Sollte ich das Problem ignorieren, da ich den OIDC-Token-Manager der js-Bibliothek verwende? Werden die Sicherheitskontrollen von dieser Bibliothek durchgeführt?
- Letzte Frage: Wenn meine Anwendung den Access Token präsentiert, wie wird die ClaimsIdentity generiert? Ist es richtig zu sagen, dass es nach der Validierung des Tokens auf dem Identity Server generiert wurde?Bedeutet dies, dass IdentityServer das Zugriffstoken erhält und es in eine Reihe von Ansprüchen übersetzt?
Danke für Ihre Klarstellungen!
Marco
Hey, danke für dein Feedback! Ich schätze das wirklich! 1. yep, ich verstehe, dass es kein Mandat für die Identity-Management-Bibliothek gibt. Ich habe mich nur gefragt, wie die "beanspruchten" Ansprüche, die unter den Scopes definiert sind, den Asp.net-Identitätsansprüchen zugeordnet werden. Für das, was ich gesehen habe, ist diese Zuordnung nur auf den Namen gemacht. Richtig? 2. Ich kann wirklich nicht den Sinn des id_token bekommen ... Haben Sie irgendwelche Ressourcen, wo ich besser verstehen kann? 3. Ok! Das ist was ich gedacht habe. 4. Client Ansprüche: Also, wenn ich möchte, dass ein Client immer einige Ansprüche haben, auch wenn sie nicht in den angeforderten Bereichen enthalten sind? 5. OK! – Marconline