Прошло 2-3 дня, когда я возился с аутентификацией JWT в .NET Core API без каких-либо значительных успехов и не нашел ничего, что соответствовало бы моим потребностям. На самом деле я работаю над внедрением API поверх существующей базы данных. Итак, у меня уже есть существующий пользовательский класс, который настроен и настроен с помощью dbContext с EF Core.
Я не хочу наследовать IdentityUser в этом классе. Причина в том, что старое приложение работает в базе данных, и оно должно иметь возможность аутентифицироваться без прохождения через мой API. Короче говоря, я не могу изменять какие-либо поля или добавлять таблицы по соображениям совместимости. Например, вот моя пользовательская таблица, уже содержащая поля с именами UserMail, Username и RoleId.
public class MyCustomUser {
public int UserId { get; set; }
public string Username { get; set; }
public byte[] Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserMail { get; set; }
public int RoleId { get; set; }
// [...]
}
Чего я не хочу:
public class MyCustomUser: IdentityUser {
public int UserId { get; set; }
public string Username { get; set; } // Conflict
public byte[] Password { get; set; } // Conflict
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserMail { get; set; } // Conflict
public int RoleId { get; set; } // Issue
// What will appear in base
// ---------------------------------------------------
public virtual string UserName { get; set; }
public virtual string NormalizedUserName { get; set; }
[ProtectedPersonalData]
public virtual string Email { get; set; }
public virtual string NormalizedEmail { get; set; }
[PersonalData]
public virtual bool EmailConfirmed { get; set; }
public virtual string PasswordHash { get; set; }
}
Есть ли способ добавить IdentityUser с настраиваемыми полями. То есть:
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<MyCustomDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddIdentity<MyCustomUser, MyCustomRole>();
// [...]
}
Я считаю, что моя проблема заключается скорее в нехватке ресурсов по этому вопросу, поскольку вся информация, которую я нашел в Интернете на сегодняшний день, использовала совершенно новый IdentityUser.
Некоторые ресурсы, на которые я смотрел, не совсем отвечая на мой вопрос: