[更新1]
我可以用下面的连接字符串使它工作。
Server=tcp:mydatabaseserver.database.windows.net,1433;Initial Catalog=mydbname
中提到的拦截器,并实施 本文.
这证明Azure的配置是正确的,问题出在应用程序的某个地方(也许是缺少一个包?
无论如何,我还是希望能够更改连接字符串,并在AAD身份验证和sql身份验证之间进行切换,而无需在应用程序中添加额外的逻辑。
[更新1]
我用的是 EF Core 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));
这个... Microsoft.Azure.Services.AppAuthentication
包也被导入(版本 1.5.0)
欢迎来到Net frameworksruntimes地狱。
目前 ActiveDirectoryIntegrated
和 ActiveDirectoryInteractive
认证选项不支持 NetCore 应用程序。
原因是,从v3.0开始,EF Core 使用Microsoft.Data.SqlClient来代替System.Data.SqlClient。. 而目前最新的版本是 Microsoft.Data.SqlClient (也是预览版)只对NET Framework支持这两个选项。
你可以在他们的问题跟踪器中看到类似的问题。为什么SqlClient for .Net Core不允许使用 "Active Directory Interactive "认证方法?#374的文件,以及《公约》的文件。SqlAuthenticationMethod 枚举- ActiveDirectoryIntegrated
(重点是我的)。
认证方法是使用活动目录集成。使用 Active Directory Integrated 连接到 SQL 数据库,使用集成的 Windows 身份验证。仅适用于.NET框架应用程序。
说到这里,使用 Authentication
的工作方法,或者等待这个选项最终在Net Core中实现。
更新
如果你使用 azure msi,请阅读此文档。
https:/docs.microsoft.comen-usazureapp-serviceapp-service-web-tutorial-connect-msi。
PRIVIOUS
您的问题可能是没有在门户中配置。您可以按照 正文 完成它,然后再试试。
首先,你需要创建SQL管理实例,这可能会花费你很长的时间。然后,你需要配置 Active Directory admin
和你 db
. 当你完成它,你会发现 ADO.NET(Active Directory password authentication)
在你 SQL database ->Connection strings
在门户网站中。你可以复制粘贴到你的代码中去解决这个问题。
我自己试了一下,对我来说是可行的。更多细节,你可以看 此职位.