Ich schreibe eine ASP.Net Core Web Application und verwende UseOpenIdConnectAuthentication
, um sie mit IdentityServer3 zu verbinden. Ich emuliere ihr ASP.Net MVC 5-Beispiel Ich versuche, die von Identity Server zurückerhaltenen Ansprüche zu transformieren, um das " Low-Level-Protokoll Ansprüche, die sicherlich nicht benötigt werden . In MVC 5 fügen sie einen Handler für die SecurityTokenValidated Notification hinzu, die die AuthenticationTicket
für eine mit den erforderlichen Ansprüchen austauscht.
In ASP.Net Core, um das Äquivalent zu machen, dachte ich, dass ich die OnTokenValidated
in OpenIdConnectEvents
behandeln müsste. Zu diesem Zeitpunkt scheint es jedoch nicht so, dass die zusätzlichen Bereichsinformationen abgerufen wurden. Wenn ich die OnUserInformationReceived
behandle, sind die zusätzlichen Informationen vorhanden, aber auf dem Benutzer und nicht auf dem Prinzipal gespeichert.
Keines der anderen Ereignisse scheint der naheliegende Ort zu sein, um die Ansprüche dauerhaft zu entfernen, die ich nicht behalten möchte, nachdem die Authentifizierung abgeschlossen ist. Irgendwelche Vorschläge dankbar erhalten!
Ich mag LeastPrivileges Vorschlag, sich früher im Prozess zu transformieren. Der bereitgestellte Code funktioniert nicht ganz. Diese Version macht:
%Vor% Dies ersetzt Principal
anstelle von Ticket
. Sie können den Code aus meiner anderen Antwort verwenden, um das neue Principal
zu erstellen. Sie können auch Ticket
gleichzeitig ersetzen, aber ich bin mir nicht sicher, ob es notwendig ist.
Also danke LeastPrivilege und Adem dafür, Wege vorgeschlagen zu haben, die meine Frage ziemlich beantwortet haben ... nur der Code brauchte leichte Anpassungen. Insgesamt bevorzuge ich LeastPrivileges Vorschlag, Ansprüche früh zu transformieren.
Vielen Dank Adem für Ihre Antwort ... es löste die überwiegende Mehrheit des Problems ... das einzige Problem ist, dass Identität.Claim ist ein Read-Only-Eigenschaft. Ich fand jedoch, dass das Erstellen eines neuen Principals funktioniert:
%Vor%Ob dies der richtige Ansatz ist, bin ich nicht sicher, aber es scheint zu funktionieren.
Sie können OnSigningIn
event von SignInScheme
implementieren. Hier ist ein Beispiel:
Ich bevorzuge persönlich die Claims-Transformation in der Middleware, wo die eigentliche Authentifizierung stattfindet.
Sie können das OnTicketReceived-Ereignis in der OIDC-Middleware dafür verwenden.
%Vor%Tags und Links asp.net-core identityserver3 claims-based-identity