Удостоверение управляемой службы Azure на C # для подключения к Azure SQL Server

Я запускаю один учебник Microsoft doc о том, как настроить доступ MSI к Azure SQL. Эта статья: https://docs.microsoft.com/en-gb/azure/app-service/app-service-web-tutorial-connect-msi

Я успешно получил строку подключения от своего диспетчера веб-конфигурации Azure.

public MyDatabaseContext(SqlConnection conn) : base(conn, true)
{
  conn.ConnectionString = WebConfigurationManager.ConnectionStrings["dbConnectionName"].ConnectionString;

  // DataSource != LocalDB means app is running in Azure with the SQLDB connection string you configured
  if (conn.DataSource != "(localdb)\\MSSQLLocalDB")
            conn.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;

  Database.SetInitializer<MyDatabaseContext>(null);
}

Что я использую в своем контроллере, используя

private MyDatabaseContext db = new MyDatabaseContext(new SqlConnection());

Когда я наконец запускаю вызов, например:

var sample = (from c in _context.Customer where c.Abbreviation == abbrev.Trim() select c).FirstOrDefault();

Я получаю сообщение об ошибке System.Data.Entity.Core.EntityException: «Сбой базового поставщика при открытии». «SqlException: ошибка входа для пользователя NT AUTHORITY \ ANONYMOUS LOGON».

Это происходит, даже если я это сделаю ( https://docs.microsoft.com/en-gb/azure/app-service/app-service-managed-service-identity#obpting-tokens-for-azure-resources )

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Azure.KeyVault;
// ...
var azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = await 
azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
// OR
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

И заполните правильный токен доступа в моем SqlConnection.

Любая помощь будет оценена


person Simon Bourdeau    schedule 10.10.2018    source источник
comment
Я предполагаю, что вы пытаетесь подключиться из службы приложений. Удостоверились ли вы, что в плане обслуживания приложений включен MSI, а затем создали ли вы группу Azure AD, добавили к ней MSI, а затем предоставили доступ к группе в SQL? Является ли ядро ​​C # .net?   -  person Murray Foxcroft    schedule 11.10.2018
comment
Можете ли вы подключиться со своей рабочей станции разработчика с помощью AccessToken? Если вы вошли в систему локально, используя удостоверение AD, сопоставленное с пользователем AAD с доступом к базе данных, то AzureServiceTokenProvider должен предоставить вам действительный токен.   -  person David Browne - Microsoft    schedule 12.10.2018


Ответы (1)


Думаю, для всех, кого это интересовало, проблема заключалась в задержке.

Однажды я сбежал;

az webapp identity poweshell command 

и добавил строку подключения;

az webapp config connection-string set

это сработало, но потребовалось некоторое время

person Simon Bourdeau    schedule 15.10.2018