我试图使登录用户的密钥保持不变。由于我当前正在使用网站的共享托管,因此我决定使用文件系统来存储密钥环。所以代码看起来像这样:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(""))
.SetApplicationName("MyWebsite")
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.ProtectKeysWithCertificate(cert);
但是,我真正不了解的是我应该在哪里握住这些键,以及我要经过的路径才能使它们在那里。由于这是一个MVC核心应用程序,因此我有点困惑,在MVC 5中,我会将其放在App_Data文件夹中,但是这里没有App_Data文件夹,我想确保它保持安全性并且无法通过浏览器访问。 / p>
另一件事是我通过相对路径还是直接路径?如果是相对的,我的出发点在哪里?是bin,根目录还是其他?
答案 0 :(得分:3)
最简单的方法可能是在app文件夹中创建一个文件夹。例如,创建一个名为Keys
的文件夹,然后使用IHostingEnvironment
对象获取该应用程序文件夹。像这样:
public class Startup
{
private readonly IHostingEnvironment _environment;
public Startup(IHostingEnvironment environment)
{
_environment = environment;
}
public void ConfigureServices(IServiceCollection services)
{
var keysFolder = Path.Combine(_environment.ContentRootPath, "Keys");
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(keysFolder))
.SetApplicationName("MyWebsite")
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.ProtectKeysWithCertificate(cert);
}
// snip
}