。NET Core 3.1部署到通用托管时的安全凭据

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

我的问题包括两个部分,但它们都与安全凭证存储有关。背景是我正在使用带有ftp的基本托管服务来部署我的.net core 3.1站点。除部署文件的根文件夹外,我没有目录访问权限。我正在使用sql server和其他一些第三方服务,这些服务需要我使用API​​密钥。

对于开发,来自不同第三方的所有文档都让我使用Windows凭据存储,或者将文件放在解决方案文件夹之外的文件系统上的某个位置。但这不是部署的选择。

所以我的问题是,要部署到该托管服务...1.使用appsettings.json存储我的API密钥是否安全?2.另外,是否只是将纯文本文件放在我网站的根目录中,这样公众就无法访问它,然后在运行时将其拉入保存?

security asp.net-core asp.net-core-3.1
1个回答
0
投票

1。使用appsettings.json存储我的API密钥安全吗?

NO如果您正在使用通过FTP到文件夹的第三方托管服务,则不安全地假设仅可以看到您的部署文件。

  1. 此外,是否只是将纯文本文件放在我网站的根目录中,这样公众也无法访问它,然后在运行时将其拉入?

与使用appsettings.json存储API密钥相同,因为appsettings文件也不应公开公开。

我可以建议使用某种第三方安全工具,例如Azure Vault或Hashi Vault来存储秘密(它们在此处已加密)并在您的应用程序中使用。

如果您不想使用第三方服务,则可以创建自定义配置生成器,在其中可以对机密进行加密,然后再保存并在使用前解密。

public class CustomConfigProvider : ConfigurationProvider
    {
        public CustomConfigProvider() { }

        public override void Load()
        {
            Data = MyEncryptUtils.DecryptConfiguration();
        }
}

public class CustomConfigurationSource : IConfigurationSource
{
    public CustomConfigurationSource() { }


    public IConfigurationProvider Build(IConfigurationBuilder builder)
    {
        return new CustomConfigProvider();
    }
}

public class CustomConfigurationSource : IConfigurationSource
{
    public CustomConfigurationSource() { }


    public IConfigurationProvider Build(IConfigurationBuilder builder)
    {
        return new CustomConfigProvider();
    }
}

致电启动

var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddCustomConfiguration()
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

来源:https://stormpath.com/blog/store-protect-sensitive-data-dotnet-core

此外,Steve在这里还有使用桥接模式和加密的替代方法:https://stevetalkscode.co.uk/configuration-bridging-part-4

© www.soinside.com 2019 - 2024. All rights reserved.