Как включить заявку на идентификационные роли в JWT? - PullRequest
0 голосов
/ 08 ноября 2019

Я реализовал Аутентификацию и Авторизацию в своем основном веб-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"
}

Полученный токен по-прежнему не включает утверждение о ролях,Чего мне не хватает?

1 Ответ

0 голосов
/ 09 ноября 2019

Отредактированная конфигурация работает, но только после создания новой базы данных и удаления всех предыдущих миграций. Должно быть, какие-то поврежденные данные / схема испортили мне все это.

...