我们的开发人员最近在我们的 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");
- 2 回答
- 0 关注
- 243 浏览
添加回答
举报
0/150
提交
取消