EF Core и Azure SQL с управляемой идентификацией (без IDBAuthTokenService) - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь подключиться к базе данных SQL Azure, развернутой в службах приложений Azure. По сути, я пытаюсь сделать то, что описано в [этом вопросе] [1] с января 2019 года, но IDBAuthTokenService не существует в Microsoft.Azure.Services.AppAuthentication (если это когда-либо существовало, нигде нет ссылок).

  • Как правильно сделать это сейчас?

  • Должен ли я отказаться от DbContext и создать вместо себя ConnectionFactory самостоятельно? (Я видел, как коллега делал это, но использование DbContext кажется идиоматическим способом сделать это в EF Core).

Startup.cs

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

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

MyCustomDBContext.cs

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

    public MyCustomDbContext(IConfiguration configuration, IDBAuthTokenService tokenService, DbContextOptions<MyCustomDBContext> 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);
    }
}

AzureSqlAuthTokenService.cs

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 с управляемой идентификацией

1 Ответ

0 голосов
/ 23 октября 2019

Вы можете использовать Microsoft.Azure.Services.AppAuthentication

enter image description here



В Startup.cs

services.AddSingleton<AzureServiceTokenProvider>(new AzureServiceTokenProvider());
services.AddDbContext<SqlDBContext>();

В вашем DbContext.cs :

private AzureServiceTokenProvider azureServiceTokenProvider;
public SqlDBContext(DbContextOptions<SqlDBContext> options, AzureServiceTokenProvider azureServiceTokenProvider) : base(options)
{
    this.azureServiceTokenProvider = azureServiceTokenProvider;
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    SqlConnection connection = new SqlConnection();
    connection.ConnectionString = "Data Source=tcp:jackdemo.database.windows.net,1433; Initial Catalog=jackdemo; "; 
    connection.AccessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://database.windows.net/").Result;
    optionsBuilder.UseSqlServer(connection);
}

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