2017-08-16 92 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