Не удается подключиться к базе данных SQL Azure с помощью AAD из C # - PullRequest
0 голосов
/ 10 мая 2018

Наши разработчики недавно включили аутентификацию 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, только на основе токенов)

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Для всех, у кого есть эта проблема - я искал много ресурсов, где пользователи имели эту точную проблему без решения, которое работало. Тем не менее, я смог наконец решить мою проблему, добавив «арендатор», в котором находилась моя база данных SQL Поскольку у меня было несколько подписок Azure.

В приведенном выше коде, чтобы получить токен:

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

Мне также нужно было добавить арендатора:

return provider.GetAccessTokenAsync("https://database.windows.net/", "hosttenant.onmicrosoft.com");
0 голосов
/ 10 мая 2018

Попробуйте с database.windows.net вместо management.azure.com опция

string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://database.windows.net/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...