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

2024-02-19

要求 - 我正在尝试从 asp.net MVC 应用程序连接到 azure SQL DB,并且到 azure SQL DB 的连接类型是“基于令牌”,下面是我完成的设置。

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

b.在SQL中为上述AAD添加了权限。

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

c.在代码级别,我尝试使用客户端 ID(从步骤 a 获得)和证书来获取访问令牌,并且我要连接的资源是“https://database.windows.net 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;

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)
            {

            }
        }

对此的任何帮助都会非常有帮助。


这是一些关于我如何解决这个问题的粗略且现成的代码。我必须提供主机租户(请参阅下面的代码。

    private async Task<string> SqlServerVersion()
    {
        var provider = new AzureServiceTokenProvider();
        var token = await provider.GetAccessTokenAsync("https://database.windows.net/", "<host tenant>.onmicrosoft.com").ConfigureAwait(false);

        SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder
        {
            csb.DataSource = "<your server>.database.windows.net";
            csb.InitialCatalog = "<your database>";
        };

        using (var conn = new SqlConnection(csb.ConnectionString))
        {
            conn.AccessToken = token;
            await conn.OpenAsync().ConfigureAwait(false);

            using (var sqlCommand = new SqlCommand("SELECT @@VERSION", conn))
            {
                var result = await sqlCommand.ExecuteScalarAsync().ConfigureAwait(false);
                return result.ToString();
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 SQL AAD 令牌的身份验证 - 用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败 的相关文章

随机推荐