Как добавить Azure MSI AccessToken в EF6 DbContext для подключения Azure SQL PaaS - PullRequest
0 голосов
/ 29 апреля 2020

При первом подходе MVC & EF6 Code я могу интегрировать Azure MSI-токен и выполнить операцию CRUD, но как мне выполнить миграцию, для которой мне нужно внедрить токен в DBContext:

Строка подключения : enter image description here

Для выполнения запроса CRUD я использую устаревший запрос типа ADO. NET, как показано ниже, и он работает: enter image description here

Получение MSI: enter image description here Чтобы запустить миграцию, как передать Azure MSI AccessToken в конструктор DbContext. enter image description here

Для dbcontext я должен определить отдельную строку соединения с именем провайдера. enter image description here

1 Ответ

2 голосов
/ 29 апреля 2020

Вам необходимо настроить в своем DI:

Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        //code ignored for simplicity
        services.AddDbContext<AzureProvider>();

        services.AddTransient<IDBAuthTokenService, AzureSqlAuthTokenService>();
    }

DbContext

public partial class AzureProvider: DbContext
{
    public IConfiguration Configuration { get; }
    public IDBAuthTokenService authTokenService { get; set; }

    public AzureProvider(IConfiguration configuration, IDBAuthTokenService tokenService, DbContextOptions<AzureProvider> options)
        : base(options)
    {
        Configuration = configuration;
        authTokenService = tokenService;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        SqlConnection connection = new SqlConnection();
        connection.ConnectionString = Configuration.GetConnectionString("defaultConnection");
        connection.AccessToken = authTokenService.GetToken().Result;

        optionsBuilder.UseSqlServer(connection);
    }
}


public class AzureSqlAuthTokenService : IDBAuthTokenService
{
    public async Task<string> GetToken()
    {
        AzureServiceTokenProvider provider = new AzureServiceTokenProvider();
        var token = await provider.GetAccessTokenAsync("https://database.windows.net/");

        return token;
    }
}

EF Core Соединение с Azure SQL с управляемой идентификацией

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...