2017-08-16 64 views
1

我在我的新的asp.net核心2.0 API應用程序中使用JWT承載者認證,並且想要爲當前身份添加一些額外的聲明。這個額外的信息位於另一個需要查詢的api中。我的理解是,索賠轉換將是適當的地方做到這一點。在.net核心1.1中,您有Microsoft.AspNetCore.Authentication nuget包中的IClaimsTransformer接口,但我無法在我的.net核心2.0應用程序中安裝此接口。在asp.net核心2.0中有沒有另外一種方法來轉換聲明,這是我用例的正確方法嗎?asp.net核心2.0聲稱轉換支持丟失

回答

3

還有另一種轉換ASP.NET Core 2.0中的聲明的方法,該方法還允許您訪問UserStore,以便您可以檢索用戶數據並將該信息作爲聲明添加。基本上,您編寫接口IUserClaimsPrincipalFactory的實現,並使用它將您的自定義實現作爲服務添加到Startup.cs中的ConfigureServices方法中。 Core 1.x中Core 2.0的主要變化是Identity依賴於服務的依賴注入,而不是在身份管道中使用中間件。在創建自定義IUserClaimsPrincipalFactory以及如何在此blog post中使用它進行授權時,有一個完整示例。

+0

你能否詳細說明如何使用'IUserClaimsPrincipalFactory'在SSO場景? – Liero

1

IClaimsTransformer已在ASP.NET Core 2.0中重命名爲IClaimsTransformation

聲明轉換簡單,用 一個方法新IClaimsTransformation服務:任務TransformAsync(ClaimsPrincipal 本金),我們稱這種對任何成功的AuthenticateAsync電話。

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); 
    } 
} 

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