使用身份验证=Active Directory 集成的 EF Core 3.1

2023-12-21

[更新1]

我可以使用以下连接字符串使其工作

Server=tcp:mydatabaseserver.database.windows.net,1433;Initial Catalog=mydbname

并实现一个拦截器,如中提到的本文 https://gasior.net.pl/blog/passwordless-connection-string-to-azure-sql-database-from-net-core-api/.

这证明Azure配置正确,问题出在应用程序的某个地方(可能是缺少包?)。

无论如何,我仍然希望能够更改连接字符串并在 AAD 身份验证和 sql 身份验证之间切换,而无需在应用程序中添加其他逻辑。

[/更新1]

我在用着EF 核心 3.1.4在 Azure WebApp 上,我想使用分配给应用程序的 Azure AD 身份进行身份验证,但遇到以下异常:

ArgumentException: Invalid value for key 'authentication'.
Microsoft.Data.Common.DbConnectionStringBuilderUtil.ConvertToAuthenticationType(string keyword, object value)

这是连接字符串:

{
    "ConnectionStrings": {
        "Admin": "Server=tcp:mydatabaseserver.database.windows.net,1433;Initial Catalog=mydbname;Authentication=Active Directory Integrated"
    }
}

我使用以下代码初始化上下文:

var connectionString = this.Configuration.GetConnectionString("Admin");
services.AddDbContext<NetCoreDataContext>(builder => builder.UseSqlServer(connectionString));

The Microsoft.Azure.Services.AppAuthentication包也被导入(版本1.5.0)


Active Directory Integrated 在 .NET Core 3.1 中不适用于我,但自从我安装了 NuGet 包 Microsoft.Data.SqlClient (我安装了 v2.0.1 版本)后,它现在就可以工作了。现在它可以使用以下连接字符串:

"MyDbConnStr": "服务器=tcp:mydbserver.database.windows.net,1433;数据库=MyDb;身份验证=ActiveDirectoryIntegrated"

注意:如果单词之间有空格,它也会起作用,如下所示:

"MyDbConnStr": "服务器=tcp:mydbserver.database.windows.net,1433;数据库=MyDb;身份验证=Active Directory 集成"

如果我包含像这样的转义引号,它也有效:

"MyDbConnStr": "服务器=tcp:mydbserver.database.windows.net,1433;数据库=MyDb;身份验证="Active Directory 集成""

最后,请注意,还有其他属性也可以在连接字符串中使用:

;User [电子邮件受保护] /cdn-cgi/l/email-protection;持久安全信息=true;加密=true;TrustServerCertificate=true;MultipleActiveResultSets=true

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用身份验证=Active Directory 集成的 EF Core 3.1 的相关文章

随机推荐