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
и добавляет утверждения к ClaimsIdentity
в методе GenerateClaimsAsync
.
Но я нахожу странным, почему JWT, полученный в браузере, не содержит утверждений, добавленных MyCustomClaimsFactory
.
Оправдано ли мое ожидание увидеть пользовательскую заявку в JWT в браузере?
Может кто-нибудь подсказать направление, в котором нужно копаться ... Почему претензий нет в JWT?
Расшифровывается JWT:
Приложение SPA: