Я реализовал Аутентификацию и Авторизацию в своем основном веб-API-приложении Asp.Net, следуя шаблонам и инструкциям Microsoft (https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-3.0).
В маркер JWT для аутентификации я хотел бы включить претензию вИдентификационные роли пользователя, так что я могу легко скрыть ненужные модули в своем клиентском приложении SPA и для быстрой авторизации на контроллерах API. Однако стандартный JWT не включает утверждения о ролях.
Могу ли я настроить токен JWT в моем используемом в настоящее время промежуточном программном обеспечении для включения заявки о ролях? Примечание. Я не создал никакого определения для текущего токена, промежуточное программное обеспечение автоматически создало токены для меня.
Редактировать Я изменил конфигурацию, так что роль является заявкой на пользователя. Кроме того, моя конфигурация изменилась, так что область действия включает эту заявку. токен по-прежнему не включает роли.
Моё главное приложение содержит ботh веб-API и сервер аутентификации. Пакеты:
<PackageReference Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.0.0" />
Запуск:
...
services.AddDefaultIdentity<AppUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<DbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
services.AddIdentityServer()
.AddApiAuthorization<PimUser, PimDbContext>(options =>
{
options.IdentityResources.Add(new IdentityResource(
name: "roles",
displayName: "Roles",
claimTypes: new List<string>{"role"}) { Required = true});
options.Clients.AddSPA("authAngular", spa =>
spa.WithScopes("AppAPI", "openid", "profile", "roles")
.WithClientId("pimAngular")
.WithRedirectUri("https://localhost:5001/authentication/login-callback")
.WithLogoutRedirectUri("https://localhost:5001/authentication/logout-callback"));
});
...
app.UseAuthentication();
app.UseAuthorization();
app.UseIdentityServer();
...
Пользователи добавляются в роль и одновременно добавляется заявка:
await userManager.AddToRolesAsync(user, role);
await userManager.AddClaimAsync(user, new Claim("role", role));
Конфигурация openidвключает в себя новую область:
"scopes_supported": [
"openid",
"profile",
"roles",
"AppAPI",
...
],
"claims_supported": [
...
"role"
]
И когда я запрашиваю конфигурацию для authClient, я также получаю правильную область:
{
"authority": "https://localhost:5001",
"client_id": "authAngular",
"redirect_uri": "https://localhost:5001/authentication/login-callback",
"post_logout_redirect_uri": "https://localhost:5001/authentication/logout-callback",
"response_type": "code",
"scope": "AppAPI openid profile roles"
}
Полученный токен по-прежнему не включает утверждение о ролях,Чего мне не хватает?