为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
Helenr 2021-06-03 09:41:42
我们的开发人员最近在我们的 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: TrueTenantId: ########-####-####-bc14-789b44d11a3cType: UserUserPrincipalName: my.identity@mycompany.com我的目标是 .NET 完整框架 4.7;Microsoft.Azure.Services.AppAuthentication包是最新的,1.0.1;我的机器没有加入任何域(不确定它是否重要,因为我不需要 AAD 集成身份验证,只需要基于令牌)
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

对于遇到此问题的任何人 - 我搜索了多个资源,其中用户遇到了这个确切的问题,但没有有效的解决方案。但是,最终通过添加我的 SQL 数据库所在位置的“租户”来解决我的问题。因为我有多个 Azure 订阅。

在上面的代码中获取token:

return provider.GetAccessTokenAsync("https://database.windows.net/");

我还需要添加租户:

return provider.GetAccessTokenAsync("https://database.windows.net/", "hosttenant.onmicrosoft.com");



查看完整回答
反对 回复 2021-06-05
  • 2 回答
  • 0 关注
  • 243 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信