使用 Azure MSI 的身份服务器 EF Core DB 配置

Posted

技术标签:

【中文标题】使用 Azure MSI 的身份服务器 EF Core DB 配置【英文标题】:Identity Server EF Core DB Configuration with Azure MSI 【发布时间】:2019-02-15 08:50:36 【问题描述】:

我正在尝试配置作为 Azure Web 应用托管的身份服务器实例,以使用托管服务身份 (https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi) 连接到我的数据库。

在编写上面链接的本文时,EF Core 不支持 SQL Server 连接的访问​​令牌。看来这已随着当前处于预览状态的 2.2 版而改变。

目前我的配置存储设置如下所示:

.AddConfigurationStore(options =>
            
                options.ConfigureDbContext = b =>
                
                    b.UseSqlServer(
                        connectionString,
                        sql =>  sql.MigrationsAssembly(migrationsAssembly); 
                    );
                ;
            )

使用 EF Core 2.2 预览包,我将如何像上面链接的指南一样添加访问令牌值?

public MyDatabaseContext(SqlConnection conn) : base(conn, true)

conn.ConnectionString = WebConfigurationManager.ConnectionStrings["MyDbConnection"].ConnectionString;
// DataSource != LocalDB means app is running in Azure with the SQLDB connection string you configured
if(conn.DataSource != "(localdb)\\MSSQLLocalDB")
    conn.AccessToken = (new AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;

Database.SetInitializer<MyDatabaseContext>(null);

乍一看,我似乎必须等待 IdentityServer4.EntityFramework 包来支持这个?

【问题讨论】:

【参考方案1】:

我有类似的问题,

尝试使用接受 DbConnection 的 UseSqlServer 的重载,并将带有令牌集的 SqlConnection 传递给它。

它对我有用

【讨论】:

以上是关于使用 Azure MSI 的身份服务器 EF Core DB 配置的主要内容,如果未能解决你的问题,请参考以下文章

MSI 可以使用 EF Code First 吗?

使用 MSI 从 Azure 函数将文件写入 Azure Data Lake 时出错

Python Azure 函数 - 使用 Key Vault 进行 MSI 身份验证

如何使用 MSI 而不是 Service Principal 来调用部署在 Azure 上的 Authenticate web api

C# - 具有托管服务标识的 Azure 存储 [关闭]

使用 Azure 托管服务标识和应用服务身份验证的服务到服务身份验证?