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

У MS есть документация для EF Core + Azure SQL с управляемой идентификацией. В этом сообщении SO, написанном два года назад, также был подробное обсуждение этого вместе с некоторыми альтернативными реализациями.

Но я не могу найти ничего для Azure PostgreSQL, который также поддерживает управляемую идентификацию, для использования с EF Core.

У MS есть общая документация для управляемого удостоверения Azure PostgreSQL здесь: https://docs.microsoft.com/en-us/azure/postgresql/howto-connect-with-managed-identity

Кажется, это предполагает, что замена пароля токеном доступа в обычной строке подключения PostgreSQL - это то, как это работает.

Итак, как лучше всего реализовать это с помощью EF Core?

Будем очень признательны за любой совет или ссылку на соответствующую документацию.




Ответы (1)


замена пароля токеном доступа в обычной строке подключения PostgreSQL - вот как это работает.

В .NET Core это обычно настраивается примерно так:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();

        services.AddTransient(typeof(Foo));
        services.AddSingleton(typeof(Bar));

        services.AddDbContext<Db>((sp, options) =>
            {
                var config = sp.GetRequiredService<IConfiguration>();
                var constr = config.GetConnectionString("ConnectionString");
                var tp = sp.GetService<ITokenProvider>();
                var token = tp.GetToken("https://ossrdbms-aad.database.windows.net");
                constr = constr.Replace("[passsword]", token);

                options.UseNpgsql(constr);
            });


    }
person David Browne - Microsoft    schedule 18.01.2021
comment
Я полагаю, мы можем использовать тот же пакет Microsoft.Azure.Services.AppAuthentication для токена? Также просматривая этот поток 2 года назад, вы, кажется, предположили, что вызов блокировки GetAccessTokenAsync().Result вряд ли вызовет проблемы с производительностью из-за кеширования, в то время как некоторые рекомендовали DbInterceptor. По-прежнему ли официальная позиция - просто вызывать GetAccessTokenAsync().Result в конструкторе или конфигурации DI? Спасибо. - person thankyoussd; 18.01.2021
comment
AppAuthentication выполняет кеширование токенов, поэтому я не думаю, что это имеет большое значение, но использование перехватчика - тоже хороший шаблон, хотя и немного более сложный. - person David Browne - Microsoft; 18.01.2021