Umwandlung von offenen Id Connect-Ansprüchen in ASP.Net Core

8

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!

    
Piers Lawson 19.08.2016, 10:34
quelle

4 Antworten

7

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.

    
Piers Lawson 23.08.2016, 09:52
quelle
4

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.

    
Piers Lawson 20.08.2016 08:03
quelle
3

Sie können OnSigningIn event von SignInScheme implementieren. Hier ist ein Beispiel:

%Vor%     
adem caglin 19.08.2016 11:33
quelle
2

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%     
leastprivilege 21.08.2016 10:06
quelle