2017-08-16 4 views
1

Ich benutze JWT Bearer Auth in meiner neuen asp.net Core 2.0 API-App und möchte einige zusätzliche Ansprüche auf die aktuelle Identität hinzufügen. Diese zusätzliche Information befindet sich in einer anderen API, die abgefragt werden muss. Mein Verständnis ist, dass Schadentransformation der richtige Ort dafür wäre. In .net core 1.1 haben Sie die IClaimsTransformer-Schnittstelle im Microsoft.AspNetCore.Authentication nuget-Paket, aber ich kann dieses nicht in meiner .net core 2.0-App installieren. Gibt es eine alternative Möglichkeit, Ansprüche in asp.net Core 2.0 zu transformieren und ist dies der richtige Ansatz für meinen Anwendungsfall?ASP.NET-Kern 2.0 Ansprüche Transformation Unterstützung fehlt

Antwort

3

Es gibt eine andere Methode zum Transformieren von Ansprüchen in ASP.NET Core 2.0, die auch Zugriff auf den UserStore ermöglicht, sodass Sie Daten über den Benutzer abrufen und diese Informationen als Ansprüche hinzufügen können. Im Grunde schreiben Sie eine Implementierung der Schnittstelle IUserClaimsPrincipalFactory und konfigurieren Sie damit Ihre benutzerdefinierte Implementierung als Service in der ConfigureServices Methode in Startup.cs hinzufügen. Die wichtigsten Änderungen in Core 2.0 von Core 1.x sind, dass Identity auf der Abhängigkeitsinjektion von Services basiert, anstatt Middleware in der Identitätspipeline zu verwenden. Es gibt ein vollständiges Beispiel zum Erstellen einer benutzerdefinierten IUserClaimsPrincipalFactory und wie Sie es für die Autorisierung in diesem blog post verwenden.

+0

Können Sie das näher erläutern, wie 'IUserClaimsPrincipalFactory' in SSO-Szenario verwenden? – Liero

1

IClaimsTransformer wurde in ASP.NET Core 2.0 in IClaimsTransformation umbenannt.

Ansprüche Transformation Einfachere, neue Dienst mit IClaimsTransformation eine einzige Methode: Aufgabe TransformAsync (ClaimsPrincipal Prinzipal) Wir nennen dies auf jeden erfolgreichen AuthenticateAsync Anruf.

services.AddSingleton<IClaimsTransformation, ClaimsTransformer>(); 

private class ClaimsTransformer : IClaimsTransformation { 
    // Can consume services from DI as needed, including scoped DbContexts 
    public ClaimsTransformer(IHttpContextAccessor httpAccessor) { } 
    public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal p) { 
     p.AddIdentity(new ClaimsIdentity()); 
     return Task.FromResult(p); 
    } 
} 

Siehe https://github.com/aspnet/Security/issues/1310

Verwandte Themen