在 ASP NET 核心标识中添加密码加密密钥



在ASP .NET Webforms中,MachineKey(一个GUID(是数据库安全和应用程序安全的重要组成部分。它被用作表单身份验证密码的加密密钥,因此,如果更改了计算机密钥,则无法再识别现有密码。 这确实为将数据库中的密码存储链接到 Web 服务器上的令牌提供了一定程度的安全性。 如果有多个 Web 服务器使用单个数据库身份验证存储,则它们必须具有相同的计算机 ID。

在.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_configmy-app-keys"));

我查看了每种服务的方法,但没有一种跳出来提供数据存储加密密钥。我想也许应用程序名称可以用作密钥,但是如果我更改它,我仍然可以使用旧密码登录,因此它显然不用于加密。

本文规定隔离是 API 的关键要求之一: https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/introduction?view=aspnetcore-3.0

这个有一个简单的示例,使用"目的字符串"在不同逻辑存储之间提供加密隔离: https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/using-data-protection?view=aspnetcore-3.0

但是我似乎无法将其放在一起以将 .NET Core 中的密码加密绑定到特定密钥。

在为标准 Asp Net 标识注入设置特定的唯一加密密钥以用于存储在数据库中的密码方面,我缺少什么?

如果我没记错的话,您可以使用以下内容执行此操作:

using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Microsoft.AspNet.DataProtection.Repositories;
namespace MySpace
{
public class MyXmlRepository : IXmlRepository
{
public MyXmlRepository()
{
// Whatever I wanted injected in.
}
public IReadOnlyCollection<XElement> GetAllElements()
{
return null;
}
public void StoreElement(XElement element, string friendlyName)
{
// Persist something
}
}
}

如果您在 IOC 中注册它,它将开始使用它进行密钥持久性,然后您可以做任何您喜欢的事情。

相关内容

  • 没有找到相关文章

最新更新