无法从 C# 使用 AAD 连接到 Azure SQL 数据库

我们的开发人员最近在我们的 Azure SQL Server 中启用了 AAD 身份验证,并将我的身份(比如my.identity@mycompany.com)作为 dbo 添加到MyDatabase。我可以使用 SSMS 成功连接到数据库,现在我想使用代码中的相同身份进行连接:


using System;

using System.Threading.Tasks;

using System.Data.SqlClient;

using Microsoft.Azure.Services.AppAuthentication;


namespace AzureADAuth {

    class Program {

        static async Task Main(string[] args) {

            var azureServiceTokenProvider = new AzureServiceTokenProvider();

            string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://management.azure.com/");


            Principal principal = azureServiceTokenProvider.PrincipalUsed;

            Console.WriteLine($"AppId: {principal.AppId}");

            Console.WriteLine($"IsAuthenticated: {principal.IsAuthenticated}");

            Console.WriteLine($"TenantId: {principal.TenantId}");

            Console.WriteLine($"Type: {principal.Type}");

            Console.WriteLine($"UserPrincipalName: {principal.UserPrincipalName}");


            using (var connection = new SqlConnection("Data Source=########.database.windows.net; Initial Catalog=MyDatabase;")) {

                connection.AccessToken = accessToken;

                await connection.OpenAsync();


                var command = new SqlCommand("select CURRENT_USER", connection);

                using (SqlDataReader reader = await command.ExecuteReaderAsync()) {

                    await reader.ReadAsync();

                    Console.WriteLine(reader.GetValue(0));

                }

            }


            Console.ReadKey();

        }

    }

}

不幸的是,它不起作用。这是输出:


AppId:

IsAuthenticated: True

TenantId: ########-####-####-bc14-789b44d11a3c

Type: User

UserPrincipalName: my.identity@mycompany.com


我的目标是 .NET 完整框架 4.7;Microsoft.Azure.Services.AppAuthentication包是最新的,1.0.1;我的机器没有加入任何域(不确定它是否重要,因为我不需要 AAD 集成身份验证,只需要基于令牌)


Helenr
浏览 247回答 2
2回答

慕丝7291255

对于遇到此问题的任何人 - 我搜索了多个资源,其中用户遇到了这个确切的问题,但没有有效的解决方案。但是,最终通过添加我的 SQL 数据库所在位置的“租户”来解决我的问题。因为我有多个 Azure 订阅。在上面的代码中获取token:return provider.GetAccessTokenAsync("https://database.windows.net/");我还需要添加租户:return provider.GetAccessTokenAsync("https://database.windows.net/", "hosttenant.onmicrosoft.com");
打开App,查看更多内容
随时随地看视频慕课网APP