共享服务器上PersistKeysToFileSystem的文件路径

时间:2019-03-23 14:40:08

标签: c# asp.net-mvc asp.net-core-mvc asp.net-core-identity asp.net-core-mvc-2.0

我试图使登录用户的密钥保持不变。由于我当前正在使用网站的共享托管,因此我决定使用文件系统来存储密钥环。所以代码看起来像这样:

services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(""))
.SetApplicationName("MyWebsite")
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.ProtectKeysWithCertificate(cert);

但是,我真正不了解的是我应该在哪里握住这些键,以及我要经过的路径才能使它们在那里。由于这是一个MVC核心应用程序,因此我有点困惑,在MVC 5中,我会将其放在App_Data文件夹中,但是这里没有App_Data文件夹,我想确保它保持安全性并且无法通过浏览器访问。 / p>

另一件事是我通过相对路径还是直接路径?如果是相对的,我的出发点在哪里?是bin,根目录还是其他?

1 个答案:

答案 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
}