.Net Web App(Azure App Service托管)Azure AD密码认证连接Azure SQL报错
我们正尝试在Azure App Service托管的.Net Web App中使用Azure AD(Active Directory密码认证)连接Azure SQL Database,但出现连接错误。
错误信息
应用程序中的服务器错误。该函数不熟悉生成服务器证书的证书颁发机构。
说明: 执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中错误来源的详细信息。
异常详细信息: AdalException: 该函数不熟悉生成服务器证书的证书颁发机构。
源错误: 执行当前Web请求期间生成了未处理的异常。可使用下面的堆栈跟踪信息确定异常的来源和位置。
堆栈跟踪:
[AdalException: The function is unfamiliar with the Certificate Authority that generated the server's certificate.]
ADALNativeWrapper.ADALGetAccessToken(String username, IntPtr password, String stsURL, String servicePrincipalName, ValueType correlationId, String clientId, Boolean* fWindowsIntegrated, Int64& fileTime) +867
ADALNativeWrapper.ADALGetAccessToken(String username, String password, String stsURL, String servicePrincipalName, ValueType correlationId, String clientId, Int64& fileTime) +105
System.Data.SqlClient.<>c__DisplayClass2_0.b__0() +371
System.Threading.Tasks.Task1.InnerInvoke() +58 System.Threading.Tasks.Task.Execute() +48 [AggregateException: One or more errors occurred.] System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +4316222 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) +12771596
System.Threading.Tasks.Task1.get_Result() +34 System.Data.SqlClient.<>c__DisplayClass134_1.<GetFedAuthToken>b__3() +41 System.Threading.Tasks.Task1.InnerInvoke() +58
System.Threading.Tasks.Task.Execute() +48
- 升级ADAL库版本:该错误多因使用的ADAL(Azure Active Directory Authentication Library)版本过旧,不兼容Azure SQL服务器证书的最新CA。将项目中
Microsoft.IdentityModel.Clients.ActiveDirectory等ADAL相关NuGet包升级至最新稳定版。 - 确认证书信任链:Azure App Service默认信任微软根CA,若为自定义运行环境,需手动将Azure SQL对应的根证书添加至应用信任存储。
- 替换为MSAL库:ADAL已被MSAL(Microsoft Authentication Library)替代,MSAL对最新证书和认证流程支持更完善。将代码中的ADAL调用替换为
Microsoft.Identity.Client包的相关逻辑,获取访问令牌后再用于SQL连接。 - 校验连接字符串配置:确保连接字符串包含正确的Azure AD认证参数,示例格式如下:
Server=tcp:{server-name}.database.windows.net,1433;Initial Catalog={db-name};Persist Security Info=False;User ID={aad-username};Password={aad-password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication=Active Directory Password; - 调整App Service TLS版本:在Azure门户的App Service配置中,进入「TLS/SSL设置」,将最小TLS版本设置为1.2或更高,旧版TLS可能不兼容最新证书加密算法。
内容的提问来源于stack exchange,提问作者Kumar

