Наши разработчики недавно включили аутентификацию AAD на наших SQL-серверах Azure и добавили мою личность (скажем, 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
Unhandled Exception: System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions,
SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, Sq
lConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTr
ansientFaultHandling)
AzureServiceTokenProvider
успешно получает мою личность из интерфейса командной строки Azure, но при входе в систему SQL происходит сбой. Чего мне не хватает?
приписка
Я нацеливаюсь на .NET full Framework 4.7; Microsoft.Azure.Services.AppAuthentication
последняя версия, 1.0.1; моя машина не присоединена ни к какому домену (не уверен, что это важно, поскольку мне не нужна интегрированная аутентификация AAD, только на основе токенов)