マネージド ID を使用した Azure SQL への EF Core 接続 質問する

マネージド ID を使用した Azure SQL への EF Core 接続 質問する

EF Core を使用して、Azure App Services にデプロイされた Azure SQL データベースに接続しています。アクセス トークン (マネージド ID 経由で取得) を使用して、Azure SQL データベースに接続しています。

私がそれをやっている方法は次のとおりです:

スタートアップ.cs:

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

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

カスタムDBコンテキスト.cs

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

    public CortexContext(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;
    }
}

これは正常に動作し、データベースからデータを取得できます。ただし、これが正しい方法であるかどうかはわかりません。

私の質問:

  1. これは正しい方法でしょうか、それともパフォーマンスに問題が生じますか?
  2. トークンの有効期限について心配する必要がありますか? 現時点ではトークンをキャッシュしていません。
  3. EF Core にはこれを処理するより良い方法がありますか?

ベストアンサー1

これは正しい方法でしょうか、それともパフォーマンスに問題が生じますか?

それが正しい方法です。OnConfiguring は新しい DbContext ごとに呼び出されるため、長期間有効な DbContext インスタンスがないと仮定すると、これが正しいパターンです。

トークンの有効期限について心配する必要がありますか? 現時点ではトークンをキャッシュしていません。

AzureServiceTokenProviderキャッシュを処理します。

EF Core にはこれを処理するより良い方法がありますか?

.NET CoreのSqlClientのAAD認証メソッドが文書化されていますここ

おすすめ記事