尝试使AAD和Azure SQL身份验证正常工作

时间:2019-05-09 16:54:24

标签: azure azure-active-directory azure-sql-database azure-authentication windows-integrated-auth

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

我已经按照此官方MS文档设置了auth: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication-configure(注意-我们不在SQL中使用托管实例)。

1)管理员组已通过门户添加 2)已根据文档创建了包含的数据库用户(也是admin组的一部分)。 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之后,它将导致我遇到上面发布的相同错误。不知道这个最初的错误是否可以揭示潜在的问题。

2 个答案:

答案 0 :(得分:0)

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

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

列表中是否有一行被选中“ 主要”?

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

答案 1 :(得分:0)

重新检查该VM是本地还是云,因为如果您的计算机是本地计算机,并且它是加入的AD,则应将其视为Azure Active Directory中的设备。否则,当计算机未与ADFS集成时,您将收到异常消息“仅在联合身份验证流中支持集成的Windows身份验证”。

有两种可能的解决方案: -将机器集成到ADFS中 -使用Active Directory密码和Azure Active Directory上的有效帐户。

在我的情况下,我无法移动机器,所以我使用了AD帐户。