首页 > 解决方案 > 尝试使 AAD 和 Azure SQL 身份验证正常工作

问题描述

我正在尝试在我的应用程序和 azure SQL 之间实现集成身份验证。该应用程序在已加入 IIS 上的 Azure AD 域(域服务)的 VM 上运行。

我已按照有关设置身份验证的官方 MS 文档: https ://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication-configure (注意 - 我们没有使用托管实例对于 SQL)。

1) 管理员组已通过门户添加 2) 已根据文档创建包含的数据库用户(也是管理员组的一部分)。3) IIS 应用程序池也以同一用户身份运行。

尝试连接到该站点会返回此错误:

[AdalException: Integrated Windows authentication supported only in federation flow.]
   ADALNativeWrapper.ADALGetAccessToken(String username, IntPtr password, String stsURL, String servicePrincipalName, ValueType correlationId, String clientId, Boolean* fWindowsIntegrated, Int64& fileTime) +829
   System.Data.SqlClient.<>c__DisplayClass2_0.<AcquireTokenAsync>b__0() +132
   System.Threading.Tasks.Task`1.InnerInvoke() +121
   System.Threading.Tasks.Task.Execute() +47

[AggregateException: One or more errors occurred.]
   System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +4323177
   System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) +12865803
   System.Threading.Tasks.Task`1.get_Result() +33
   System.Data.SqlClient.<>c__DisplayClass134_1.<GetFedAuthToken>b__0() +39
   System.Threading.Tasks.Task`1.InnerInvoke() +121
   System.Threading.Tasks.Task.Execute() +47

[AggregateException: One or more errors occurred.]

我们的 web.config 使用它作为连接字符串:

name="LocalSqlServer" connectionString="Server=tcp:XXXXX;Initial Catalog=XXXXX;Persist Security Info=False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Authentication='Active Directory Integrated';" />

我们希望能够在我们的 web.config 中删除任何对纯文本密码的提及,并且 azure 身份验证应该能够提供这一点。

任何帮助,将不胜感激!

编辑:为了重新开始,我将应用程序迁移到另一个新的 Azure VM。这次,该过程最初导致此错误:

Unable to load adalsql.dll (Authentication=ActiveDirectoryPassword). Error code: 0x2.

安装 .dll 后,它会导致我出现上面发布的相同错误。不确定这个初始错误是否可以揭示潜在问题。

标签: azureazure-active-directoryazure-sql-databasewindows-authenticationazure-authentication

解决方案


错误消息是“仅在联合流中支持集成 Windows 身份验证”

从门户中,如果您选择“Azure Active Directory”,然后选择“自定义域名”

您是否在列表中选择了“主要”一行?

如果是这种情况,您可以尝试添加一个新的自定义域,将其标记为联合,然后使用该域中的用户进行集成身份验证。


推荐阅读