Идентификатор управляемой службы Azure в C # для подключения к Azure SQL Server - PullRequest
0 голосов
/ 10 октября 2018

Я запускаю одно учебное пособие для Microsoft по настройке доступа 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#obtaining-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.

Буду признателен за любую помощь

1 Ответ

0 голосов
/ 15 октября 2018

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

Как только я побежал;

az webapp identity poweshell command 

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

az webapp config connection-string set

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

...