基于SQL AAD令牌的身份验证 - 用户'NT AUTHORITY\ANONYMOUS LOGON登录失败

Pri*_*tra 11 sql-server authentication asp.net-mvc azure-active-directory azure-sql-database

要求 - 我试图从asp.net MVC应用程序连接到azure SQL DB,连接类型到azure SQL DB是"基于令牌的",下面是从我的结束完成的设置.

一个.使用基于证书的身份验证创建了AAD应用程序(例如:MTSLocal).

湾 在SQL中添加了对上述AAD的权限.

从外部提供商创建用户[MTSLocal];

c.在代码级别,我试图通过使用客户端ID(从步骤a获得)和证书来获取访问令牌,并且我连接的资源是" https://database.windows.net ".请参考示例代码 -

string authority = string.Format(System.Globalization.CultureInfo.InvariantCulture, "https://login.windows.net/{0}",
                "xxxx.onmicrosoft.com");
            var authContext = new AuthenticationContext(authority);        
            AuthenticationResult result = null;
            result = await authContext.AcquireTokenAsync("https://database.windows.net", AssertionCert);
            token = result.AccessToken;
Run Code Online (Sandbox Code Playgroud)

d.我能够检索访问令牌,但当我尝试打开SQL连接时.我得到上述错误.

        sqlBuilder["Data Source"] = serverName;
        sqlBuilder["Initial Catalog"] = databaseName;
        sqlBuilder["Connect Timeout"] = 30;

        string accesstoken = GetAccessToken();

        using (SqlConnection connection = new SqlConnection(sqlBuilder.ConnectionString))
        {
            try
            {
                connection.AccessToken = accesstoken;
                connection.Open();
            }
            catch (Exception ex)
            {

            }
        }
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助都会非常有帮助.

小智 1

在AAD中注册的应用程序应添加到DB的用户列表中,并且应将各自的角色赋予DB USER。

假设注册的应用程序的名称是“App_AAD_Register_Name”。将此用户添加到相应的数据库,就像执行以下查询一样。这样,用户将被添加到数据库服务器的主要用户列表中。

从外部提供商创建用户 [App_AAD_Register_Name]。

创建一些通用角色,如下所示

创建角色 [RoleUser] 转到 SCHEMA :: dbo 上的 SELECT 授予 [RoleUser] 转到 SCHEMA 上的插入 :: dbo 到 [RoleUser] GO

创建角色并授予相应权限后,将角色分配给第一步中创建的用户。

EXEC sp_addrolemember N'RoleUser'、N'App_AAD_Register_Name'。

完成所有这些步骤后,您将能够使用令牌连接到数据库。

这些步骤对我有用。