ASP.NET Core MVC. Реализация интерфейса IDataProtectionKeyContext
Есть контекст данных:
public class OurDbContext : DbContext, IOurDbContext, IDataProtectionKeyContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
}
Есть метод, который реализует отправку данных в БД:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> CreateNewClient(Employee client, string TypeOfClient)
{
var secstring = _protector.Protect(client.Password);
Employee temp = new Employee
{
Name = client.Name,
Password = secstring,
RoleId = 1
};
await _mediatr.Send(new NewEmployee.NewEmployeeCommand(temp));
return Redirect("~/");
}
В БД не попадает ничего.
Если убрать из класса контекста реализацию IDataProtectionKeyContext
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; } = null!;
и сократить строчку с
builder.Services.AddDataProtection().PersistKeysToDbContext<OurDbContext>();
до
builder.Services.AddDataProtection();
то данные попадают в БД с зашифрованным паролем. Но в таком случае, уже через 5 минут попытка прочитать этот пароль вызовет исключение из-за устаревшего ключа.
В справке Майкрософт ничего по этому поводу не сказано:
Ответы (1 шт):
Автор решения: Денис
→ Ссылка
Говоря коротко, я попробовал сменить контекст с PostgreSQL на MS SQL и Sqlite и в них всё работает хорошо при той конфигурации, которая рекомендует Майкрофост в своей справке.