如何使用Azure密钥保管库(Azure Key Vault)

作者 the7
发布于 2020年08月18日
评论 0
浏览 125

配置除了传统的appsettins.json,还可以使用其他的数据源,比如Azure Key Vault。这是微软提供的一个云密码保管库,即你可以把一些机密信息存在Azure云上,而不用放在appsettings.json中,这大大的提升了应用安全性。

下边就一步一步介绍如何使用Azure Key Vault

一、注册微软Azure账号

网址 :https://azure.microsoft.com/zh-cn/ , 注意是海外版,不是世纪互联运营的国内版。点击页面上的【免费账户】或者【免费开始使用】按钮,开始注册。

注册过程会用到信用卡(有美金支付功能),所以先得准备一张信用卡,并且会扣除1美元。

其他个人资料随便填写,一直下一步就OK。

二、创建Azure Key Vault

Azure Key Valut创建有两种方式,界面操作和命令行方式,个人推荐用命令行。

  1. 进入到Azure控制面板 https://portal.azure.com/#home 点击右上角的命令行图标,页面底部就会弹出命令行窗口。

  2. 登录面板

    az login
    
  3. 创建资源组

     az group create --name "UTResourceGroup" --location eastus
    
  4. 创建一个密码保管库(Key Valut)

     az keyvault create --name "UT-Vault" --resource-group "UTResourceGroup" --location eastus
    
  5. 将机密信息放入Key Valut

     az keyvault secret set --vault-name "UT-Vault" --name "MysqlPassword" --value "620389"
    
  6. 显示机密信息

    az keyvault secret show --name "MysqlPassword" --vault-name "UT-Vault"
    

三、创建一个Azure应用

搜索找到Azure Active Directory,在其左侧点击应用注册

四、上传证书

利用openssl创建pfx证书,双击pfx证书,将证书导入到系统。进入刚创建的应用,点击其左侧证书和密码链接,在右边上传cer证书,上传后会得到一个指纹,复制下来以备用。

随便介绍下如何创建证书
打开openssl

openssl

生成cer证书和key

req -newkey rsa:2048 -nodes -keyout 0.key -x509 -days 365 -out 0.cer

生成pfx证书

pkcs12 -export -in 0.cer -inkey 0.key -out 证书.pfx

五、关联密码保管库与应用

进入创建好的的Key Valut,点击添加访问策略,选择权限和刚才的应用进行关联。

六、集成到Asp.Net Core

Nuget添加Microsoft.Extensions.Configuration.AzureKeyVault

打开 Program.cs,修改代码集成Azure Key Vault。

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, config) =>
                {
                    var builtConfig = config.Build();
                    var print = "";//上传证书得到的指纹
                    var vault = "UT-Valut"; //密码保管库名字
                    var appId = "";//创建的应用ID
                    using (var store = new X509Store(StoreLocation.CurrentUser))
                    {
                        store.Open(OpenFlags.ReadOnly);
                        var certs = store.Certificates
                            .Find(X509FindType.FindByThumbprint,
                                print, false);

                        config.AddAzureKeyVault(
                            $"https://{vault}.vault.azure.net/",
                            appId,
                            certs.OfType<X509Certificate2>().Single());

                        store.Close();
                    }
                })
                .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });

七、使用Azure Key Valut

注入IConfiguration即可,跟使用普通的appsettins.json一样。

    [ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    {
        private readonly IConfiguration _configurationRoot;

        public TestController(IConfiguration configurationRoot)
        {
            _configurationRoot = configurationRoot;
        }

        public string Index()
        {
            return _configurationRoot["MysqlPassword"];
        }
    }

如果以上配置都正确的话,就能看到在第二步设置的MysqlPassword。

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)