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

Boj*_*jan 5 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);
Run Code Online (Sandbox Code Playgroud)

然而,我真正不明白的是我应该把这些钥匙放在哪里,以及我要经过什么路径才能让它们在那里。由于这是一个 MVC 核心应用程序,我有点困惑,在 MVC 5 中我会将它放在 App_Data 文件夹中,但这里没有 App_Data 文件夹,我想确保它保持安全并且无法通过浏览器访问。

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

Dav*_*idG 11

最简单的方法可能是在 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
}
Run Code Online (Sandbox Code Playgroud)

  • @BenjaminAbt我只是说事情远没有你声称的那么糟糕。首先,.NET Core 使应用程序代码与所提供的资产完全不同。所以是的,这是放置这些文件的安全位置。在那里存储安全数据并不荒谬。 (2认同)