【发布时间】:2020-02-09 00:32:18
【问题描述】:
Asp.Net Core 3.0
我正在使用ASP.NET Core web application with Angular and Authentication(个人用户帐户)模板(来自 Visual Studio 2019)。
我的目的是在生成的JWT 中添加一些自定义声明并在浏览器中使用它们。
为了做到这一点,我扩展了UserClaimsPrincipalFactory
public class MyCustomClaimsInjector : UserClaimsPrincipalFactory<ApplicationUser>
{
public MyCustomClaimsFactory(UserManager<ApplicationUser> userManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, optionsAccessor)
{
}
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(ApplicationUser user)
{
var id = await base.GenerateClaimsAsync(user);
id.AddClaim(new Claim("my_claim1", "AdditionalClaim1"));
id.AddClaim(new Claim("my_claim2", "AdditionalClaim2"));
return id;
}
}
同样,我已经在Startup.cs注册了扩展名
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddClaimsPrincipalFactory<MyCustomClaimsFactory>();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
services.AddControllersWithViews();
services.AddRazorPages();
// In production, the Angular files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
}
在登录阶段,从 SPA 客户端开始,调试器通过 MyCustomClaimsFactory 并将声明添加到 GenerateClaimsAsync 方法中的 ClaimsIdentity 中。
但是,我觉得奇怪的是为什么在浏览器中收到的 JWT 不包含 MyCustomClaimsFactory 添加的声明。
我是否希望在浏览器中看到 JWT 中的自定义声明?
任何人都可以建议深入研究的方向...为什么 JWT 中没有声明?
【问题讨论】:
标签: c# authentication jwt asp.net-core-identity asp.net-core-3.0