.net core 将Audit.NET SqlDataProvider与Azure SQL和托管标识一起使用

.net core 将Audit.NET SqlDataProvider与Azure SQL和托管标识一起使用,.net-core,azure-sql-database,audit.net,audit.net.sqlserver,.net Core,Azure Sql Database,Audit.net,Audit.net.sqlserver,我们正在使用Audit.NET SqlServer数据提供程序在Microsoft SQL Server中存储审核日志。我们目前正在迁移到使用具有托管标识的Azure SQL来访问数据库。我们无法让Audit.NET与Azure SQL一起工作,也无法使用托管标识连接到所述数据库。文档中没有提供有关是否支持此功能的任何信息 我们使用Entity Framework Core为自己的数据库连接成功地做到了这一点,方法是向上下文使用的SQL连接添加一个访问令牌,如下所示: SqlConnection

我们正在使用Audit.NET SqlServer数据提供程序在Microsoft SQL Server中存储审核日志。我们目前正在迁移到使用具有托管标识的Azure SQL来访问数据库。我们无法让Audit.NET与Azure SQL一起工作,也无法使用托管标识连接到所述数据库。文档中没有提供有关是否支持此功能的任何信息

我们使用Entity Framework Core为自己的数据库连接成功地做到了这一点,方法是向上下文使用的SQL连接添加一个访问令牌,如下所示:

SqlConnection sqlConnection = new SqlConnection(connectionString);
sqlConnection.AccessToken = new AzureServiceTokenProvider()
          .GetAccessTokenAsync("https://database.windows.net/")
          .Result;
这个很好用。我们遇到的问题是,我们希望通过Audit.NET Sql数据提供程序实现同样的目标。由于SqlDataProvider使用的AuditContext是内部的,因此我们无法向使用的SqlConnection传递访问令牌


我们提出的唯一解决方案是编写我们自己的数据提供程序,它实际上与SqlDataProvider相同,唯一的区别是所使用的上下文将在SqlConnection上设置访问令牌。这是这里唯一可行的解决方案,还是Audit.NET提供了其他方法让它与Azure SQL和托管标识一起工作?

我认为最好的方法是公开一个可选设置,以提供
DbContextOptions
,您可以在其中设置一个拦截器,如中的拦截器,为连接

因此,您可以按如下方式初始化配置:

Audit.Core.Configuration.Setup()
.UseSqlServer(sql=>sql
.ConnectionString(“连接字符串”)
.DbContextOptions(新的DbContextOptions生成器()
.AddInterceptors(新AzureAuthenticationInterceptor(新AzureServiceTokenProvider()))
(四),;

Audit.Core.Configuration.Setup()
.UseSqlServer(sql=>sql
.DbContextOptions(新的DbContextOptions生成器()
.UseSqlServer(“连接字符串”)
.AddInterceptors(新AzureAuthenticationInterceptor(新AzureServiceTokenProvider()))
(四),;
更新
新的
DbContextOptions
设置是在16.2.1版上添加的

你可以在github上使用吗?我已经为你打开了这个:非常感谢,这正是我想要的!