Мой ASP.Net Core Api использует проверку токена JWT для авторизации при вызовах API, но также использует UserManager для проверки имени пользователя/пароля для аутентификации перед выдачей токена.
Предыдущий вопрос относительно об этом спрашивали здесь
Проблема, с которой я столкнулся, заключалась в том, что использование
Код: Выделить всё
builder.Services.AddIdentity()
.AddEntityFrameworkStores();
Код: Выделить всё
builder.Services.AddAuthentication("Bearer")
.AddJwtBearer()
Следуя совету из этого сообщения stackoverflow, я перестал использовать AddIdentity и теперь вместо этого делаю это
Код: Выделить всё
IdentityBuilder idbuilder = builder.Services.AddIdentityCore();
idbuilder = new IdentityBuilder(idbuilder.UserType, builder.Services);
idbuilder.AddRoles(); // Add this line
idbuilder.AddEntityFrameworkStores();
idbuilder.AddSignInManager();
idbuilder.AddRoleManager();
Для фона я собрал 3 класса из базы данных
Код: Выделить всё
- User
- Role
- UserRole
Код: Выделить всё
- User : IdentityUser
- Role : IdentityRole
- UserRole : IdentityUserRole
USER
Код: Выделить всё
public string NormalizedUserName { get; set; }
public string NormalizedEmail { get; set; }
public DateTime? LockoutEnd { get; set; }
public string ConcurrencyStamp { get; set; }
Код: Выделить всё
public string NormalizedName { get; set; }
public string ConcurrencyStamp { get; set; }
Код: Выделить всё
var inRole = await _userManager.IsInRoleAsync(user, "APIRole");
Код: Выделить всё
System.InvalidOperationException: Cannot create a DbSet for 'IdentityUserRole' because this type is not included in the model for the context.
Код: Выделить всё
modelBuilder.Entity().ToTable("UserRole").HasKey(p => new { p.UserId, p.RoleId });
Код: Выделить всё
[Authorize(Roles = "APIRole")]
Как заставить ASP.Net Core Identity работать со старым хранилищем данных Asp.Net Identity с ролями
Примечание. Я не могу выполнить миграцию, поскольку устаревшая система все еще работает.
Подробнее здесь: https://stackoverflow.com/questions/790 ... rer-scheme
Мобильная версия