我正在尝试让我的密钥持久保存给登录的用户。由于我目前正在使用网站的共享托管,我决定使用文件系统来存储密钥环。所以代码看起来像这样:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(""))
.SetApplicationName("MyWebsite")
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.ProtectKeysWithCertificate(cert);
然而,我真正理解的不是我应该握住这些键的地方,以及为了让它们存在而我传入的路径是什么。由于这是一个MVC核心应用程序,我有点困惑,在MVC 5我会把它放在App_Data文件夹中,但这里没有App_Data文件夹,我想确保它保持安全,不能通过浏览器访问。
另一件事是我传递相对路径还是直接路径?如果它是相对的,我的出发点在哪里?是bin,根目录还是其他什么?
最简单的方法可能是在app文件夹中创建一个文件夹。例如,创建一个名为Keys
的文件夹,并使用IHostingEnvironment
对象获取app文件夹。像这样的东西:
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
}