Проверка ролей с ASP: Net Identity 2.1 не работает - PullRequest
0 голосов
/ 07 октября 2018

Я обновил свое приложение ASP.Net MVC Core с 1.1 до 2.1, включая миграцию ASP.Net Identity с 1.1 до 2.1.

Я получил работу, включая интеграцию ASP.Net Identity EntityFramework с использованием Sqlite.

Моя startup.cs конфигурация выглядит как this :

        services.AddDefaultIdentity<IdentityUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.Configure<IdentityOptions>(options =>
        {
            // Password settings.
            options.Password.RequireDigit = true;
            options.Password.RequireLowercase = true;
            options.Password.RequireNonAlphanumeric = true;
            options.Password.RequireUppercase = true;
            options.Password.RequiredLength = 6;
            options.Password.RequiredUniqueChars = 1;

            // Lockout settings.
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
            options.Lockout.MaxFailedAccessAttempts = 5;
            options.Lockout.AllowedForNewUsers = true;

            // User settings.
            options.User.AllowedUserNameCharacters =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
            options.User.RequireUniqueEmail = false;
        });

        services.AddAuthentication()
            .AddMicrosoftAccount(options =>
            {
                options.ClientId = Configuration["Authentication:Microsoft:ClientId"];
                options.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
            });

        services.AddAuthorization(options =>
        {
            options.AddPolicy(PolicyNames.RequireTauchbold, policy => policy.RequireRole(Rolenames.Tauchbold));
        });

И в Configure () у меня есть:

app.UseAuthentication();

Тогда в моем контроллере Ihave:

[Authorize(Policy = PolicyNames.RequireTauchbold)]
public class EventController : Controller
{
    ...

Весь исходный код можно найти здесь, на GitHub.

Проблема

Проблема в том, что вышеуказанная проверка на контроллере всегда возвращает "доступ"«отказано», даже если я правильно вошел в систему и мне назначена роль.Я не знаю, что здесь может пойти не так.У кого-нибудь есть идея, что я мог бы пропустить здесь ?

Обновление

Я понял, что простой, пустой атрибут [Authorize] работает (обеспечивает вход в систему), но[Authorize(Policy = '...')] не признает роль.Я проверил таблицы БД, но они выглядят хорошо для меня.Нужно ли мне что-то настраивать в базе данных, кроме ÀspNetUsers, AspNetRoles и AspNetUserRoles?

Обновление 2:

Я получил работу с решением от @itminus, но имелдобавить вызов к AddDefaultUI() в автозагрузке, чтобы снова заработали вход в систему и регистрация.Итак, мой запуск теперь содержит следующие строки для настройки Identity:

        services.AddIdentity<IdentityUser, IdentityRole>()
            .AddRoleManager<RoleManager<IdentityRole>>()
            .AddDefaultUI()
            .AddEntityFrameworkStores<ApplicationDbContext>();

1 Ответ

0 голосов
/ 08 октября 2018

Я только что проверил ваш код.Поскольку AddDefaultIdentity<IdentityUser>() в версии 2.1.x по умолчанию не включает Role, я изменяю ваш код следующим образом:

//services.AddDefaultIdentity<IdentityUser>()
//    .AddEntityFrameworkStores<ApplicationDbContext>();

services.AddIdentity<IdentityUser, IdentityRole>()
    .AddRoleManager<RoleManager<IdentityRole>>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

Чтобы проверить с помощью вышеуказанного кода, я регистрирую нового пользователя идобавьте роль для пользователя:

await _roleManager.CreateAsync(new IdentityRole(Rolenames.Tauchbold));
var user= await _userManager.GetUserAsync(HttpContext.User);
await _userManager.AddToRoleAsync(user, Rolenames.Tauchbold);

И выйдите сначала и войдите снова, теперь это работает:

enter image description here

...