В ASP .NET Webforms MachineKey (guid) был важной частью безопасности базы данных, а также безопасности приложений. Он использовался в качестве ключа шифрования для паролей для проверки подлинности с помощью форм, поэтому при изменении ключа компьютера существующие пароли больше не распознаются. Это обеспечило некоторый уровень безопасности при связывании хранилища паролей в базе данных с токеном на веб-сервере. Если было несколько веб-серверов, использующих одно хранилище аутентификации базы данных, было необходимо, чтобы все они имели один и тот же идентификатор машины.
В .NET Core MVC теперь есть несколько сервисов, которые мы объявляем в Startup.cs
:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options => {
options.ExpireTimeSpan = new TimeSpan(0, 45, 0);
options.LoginPath = new PathString("/Account/Login");
options.AccessDeniedPath = new PathString("/Account/AccessDenied");
}
);
services.AddDataProtection()
.SetApplicationName("MyApplicationName")
.PersistKeysToFileSystem(new System.IO.DirectoryInfo(@"C:\server_config\my-app-keys"));
Я рассмотрел методы для каждой службы, и ни один из них не выскакивает, как предоставление ключа шифрования хранилища данных. Я подумал, что, возможно, ApplicationName можно использовать в качестве ключа, но если я его изменю, я все равно могу войти в систему со старыми паролями, поэтому он явно не используется для шифрования.
В этой статье изоляция рассматривается как одно из ключевых требований API: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/introduction?view=aspnetcore-3.0
и у этого есть простой пример использования «Целевой строки» для обеспечения изоляции шифрования между разными логическими хранилищами: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/using-data-protection?view=aspnetcore-3.0
однако я не могу связать это вместе, чтобы связать шифрование паролей в .NET Core с определенным ключом.
Что мне не хватает в отношении установки определенного уникального ключа шифрования для стандартной инъекции Asp Net Identity, который будет использоваться для паролей, хранящихся в базе данных?