程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法?

开发过程中遇到EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法的问题如何解决?下面主要结合日常开发的经验,给出你关于EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法的解决方法建议,希望对你解决EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法有所启发或帮助;

使用 EF Core 和 Azure AD 集成身份验证连接到数据库的主要方式似乎有三种。

方法一:经典方法

在 DbCo@R_696_10443@t 中,输入:

 protected overrIDe voID OnConfiguring(DbCo@R_696_10443@toptionsBuilder optionsBuilder)
 {
     var conn = new sqlConnection(ConnString);
     conn.Accesstoken = new AzureserviCETokenProvIDer().GetAccesstokenAsync("https://database.windows.net/").Result;
     optionsBuilder.UsesqlServer(conn);
 }
@H_403_10@

在本地开发人员的机器上和 Azure 中都有效,但是由于没有 OnConfiguring 的异步版本,所以使用 .Result@H_403_10@ 的这种狡猾的 async-over-sync 用法。不建议使用 .Result@H_403_10@ 调用 async-over-sync。

方法二:使用连接拦截器

public class AadAuthenticationDbConnectionInterceptor : DbConnectionInterceptor
{
    public overrIDe async Task<InterceptionResult> ConnectionopeningAsync(DbConnection connection,ConnectionEventData eventData,InterceptionResult result,CancellationToken cancellationToken)
    {
        var sqlConnection = (sqlConnection)connection;
        sqlConnection.Accesstoken = await new AzureserviCETokenProvIDer().GetAccesstokenAsync("https://database.windows.net/");

        return await base.ConnectionopeningAsync(connection,eventData,result,cancellationToken);
    }

    public overrIDE interceptionResult Connectionopening(DbConnection connection,InterceptionResult result)
    {
        var sqlConnection = (sqlConnection)connection;
        sqlConnection.Accesstoken = new AzureserviCETokenProvIDer().GetAccesstokenAsync("https://database.windows.net/").GetAwaiter().GetResult();

        return base.Connectionopening(connection,result);
    }

 }
@H_403_10@

这也适用于本地和 Azure,但如果您执行任何非异步 EF 操作,仍然存在 .Result@H_403_10@ 的狡猾异步同步使用,因为 EF 调用非异步 Connectionopening 方法。

方法 3:在连接字符串中指定身份验证类型

如果您使用的是 Microsoft.Data.sqlClIEnt v2.1.0 或更高版本,则可以使用两种新的身份验证类型:Active Directory Managed IDentity@H_403_10@ 和 Active Directory Interactive@H_403_10@。

 protected overrIDe voID OnConfiguring(DbCo@R_696_10443@toptionsBuilder optionsBuilder)
 {
     var connString = "Server=tcp:xxxxxx.database.windows.net,1433;Database=yyyyy;Authentication=Active Directory Managed IDentity";
     optionsBuilder.UsesqlServer(conn);
 }
@H_403_10@

这会为您处理所有事情,并且没有异步同步问题。但是,需要知道代码是否在Azure中运行才能选择身份验证类型;对于本地开发,Active Directory Interactive@H_403_10@ 模式非常烦人,因为每次启动应用程序时它都会弹出登录提示。

问题是...

有没有办法让这个工作既不存在同步异步问题,也不会有每次运行应用程序时出现登录弹出窗口的问题?

解决方法

@ErikEJ 在评论中回答了这个问题。

解决方案是等待引入 Active Directory Default 身份验证类型的 @H_367_5@microsoft.Data.SqlClient 的 v3.0有了这个,我们将能够做到:

 protected override void OnConfiguring(DbCo@R_696_10443@tOptionsBuilder optionsBuilder)
 {
     var connString = "Server=tcp:xxxxxx.database.windows.net,1433;Database=yyyyy;Authentication=Active Directory Default";
     optionsBuilder.UseSqlServer(conn);
 }

听起来这将提供一个巧妙的解决方案。

大佬总结

以上是大佬教程为你收集整理的EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法全部内容,希望文章能够帮你解决EF Core:使用 AD 身份验证连接到 Azure SQL 的最佳实践方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。