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

问题描述 投票:1回答:1

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

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

然而,我真正理解的不是我应该握住这些键的地方,以及为了让它们存在而我传入的路径是什么。由于这是一个MVC核心应用程序,我有点困惑,在MVC 5我会把它放在App_Data文件夹中,但这里没有App_Data文件夹,我想确保它保持安全,不能通过浏览器访问。

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

c# asp.net-mvc asp.net-core-mvc asp.net-core-identity asp.net-core-mvc-2.0
1个回答
4
投票

最简单的方法可能是在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
}
© www.soinside.com 2019 - 2024. All rights reserved.