.net core 5 worker 服务的无密码连接字符串
Posted
技术标签:
【中文标题】.net core 5 worker 服务的无密码连接字符串【英文标题】:Passwordless connectionstring for .net core 5 worker service 【发布时间】:2022-01-02 01:05:30 【问题描述】:我正在创建具有 azure SQL DB 实现的 .Net Core 5 Windows 服务(使用工作进程模板)。
我需要创建一个没有用户名和密码的 SQL 连接字符串。
我知道有一个东西叫Managed Identities
但是到目前为止我读到的只是关于
为 azure APP 服务实现这一点。找不到任何带有 .Net Core 工作人员服务的示例
由于我正在创建 Windows 服务,它将部署在多个 VM 中,如何创建没有用户名和密码的连接字符串?
【问题讨论】:
DOMAIN\MACHINENAME$
如果它们作为网络服务运行。
【参考方案1】:
解决方法尝试使用这些
1) Azure AD 令牌,使用 Azure Active Directory 进行 Azure SQL Server 身份验证
此身份验证方法允许中间层服务通过从 Azure AD 获取令牌来获取 JSON Web 令牌 (JWT) 以连接到 SQL 数据库、SQL 托管实例或 Azure Synapse 中的数据库。此方法支持各种应用场景,包括服务身份、服务主体和使用基于证书的身份验证的应用程序。您必须完成四个基本步骤才能使用 Azure AD 令牌身份验证:
向 Azure Active Directory 注册您的应用程序并获取 您的代码的客户端 ID。 创建代表应用程序的数据库用户。 在运行应用程序的客户端计算机上创建证书。 将证书添加为您的应用程序的密钥。例子:
string ConnectionString = @"Data Source=n9lxnyuzhv.database.windows.net; Initial Catalog=testdb;";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.AccessToken = "Your JWT token";
conn.Open();
更多详情请参考此文档:https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-configure?tabs=azure-powershell
2) 尝试将连接字符串(敏感信息)存储在 Azure Key Vault 中并动态检索以建立数据库连接。
有关详细信息,请参阅此文档: https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-create-vault-azure-web-app
【讨论】:
【参考方案2】:我建议您按照这些步骤操作。
在您的虚拟机上设置托管标识
在每个 VM 上创建一个托管标识。 通过创建包含的数据库用户并向这些用户分配正确的权限,授予这些托管标识访问 Azure SQL 数据库的权限。请参阅此documentation page,直至并包括“创建包含的用户”部分。
利用应用程序中的托管标识
.NET SQL 驱动程序的最新版本 Microsoft.Data.SqlClient 可以处理从 Azure Active Directory 获取令牌并在 SQL 查询期间使用它的过程。这取代了在连接字符串中使用用户名和密码的常见身份验证方法。
这意味着作为消费者,您不需要处理令牌获取过程,也不需要处理令牌的缓存或更新。
一些资源可以做到这一点:
微软官方文档:https://docs.microsoft.com/en-us/sql/connect/ado-net/sql/azure-active-directory-authentication?view=sql-server-ver15。 我写的一篇博文展示了如何利用较新版本的 Microsoft.Data.SqlClient:https://mderriey.com/2021/07/23/new-easy-way-to-use-aad-auth-with-azure-sql/。【讨论】:
以上是关于.net core 5 worker 服务的无密码连接字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何为 .NET Core 3.0 Worker 服务设置事件日志
最全.NET Core .NET 5.NET 6和.NET 7简介和区别