如何替换ASP.NET Core的MachineKey?

8

我的任务很简单 - 在服务器集群中共享cookie

我知道在asp.net core中使用机器密钥的旧方法不起作用,但有一个DataProtection API

然而,我不能将密钥存储在共享文件夹中(这是DataProtection的默认内置行为)

是否有办法将密钥交换数据存储在配置文件中?(就像在旧版asp.net中一样)


嗨@VoimiX,你解决了这个问题吗?我不想为简单的应用程序添加另一个我必须每次设置的Azure服务/依赖项。 - Dirk Boer
1个回答

2
您可以将密钥存储在文件系统文件夹中,但是这样做当然存在安全问题,但是与在web.config中存储密钥的问题类似。
不同的是,数据保护API中不仅有一个像机器密钥一样的密钥,而且数据保护API中的密钥在给定时间后会过期,并在需要时自动创建新密钥。例如,如果您使用数据保护API加密某些内容并将其持久存储在数据库中,则可能需要使用已过期的密钥稍后解密它。
此示例将密钥存储在名为dp_keys的文件夹中,该文件夹位于Web应用程序的主文件夹中。
string pathToCryptoKeys = Path.Combine(environment.ContentRootPath, "dp_keys");
        services.AddDataProtection()
            .PersistKeysToFileSystem(new System.IO.DirectoryInfo(pathToCryptoKeys));

请注意,将密钥存储在文件系统中并不是推荐的方法。文档中有一个PowerShell脚本,可以使得在系统注册表中按应用程序池存储密钥成为可能。对于Azure,还有Azure Key Vault来存储数据保护密钥。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接