如何使用MFA支持.Net Core将Azure数据库与Active Directory Universal连接

如何使用MFA支持.Net Core将Azure数据库与Active Directory Universal连接,azure,.net-core,database-connection,azure-database-mysql,Azure,.net Core,Database Connection,Azure Database Mysql,我正在尝试连接到azure数据库。 我的当前连接字符串 “return$”Password={this.Password};持久安全信息=True;用户ID={this.User};初始目录={this.Database};数据源={this.Server}”;“如下所示。如何使用Active Directory Universal with MFA支持连接到azure数据库如果要将azure SQL数据库与Active Directory Universal with MFA连接,可以将SQL

我正在尝试连接到azure数据库。 我的当前连接字符串
“return$”Password={this.Password};持久安全信息=True;用户ID={this.User};初始目录={this.Database};数据源={this.Server}”;“如下所示。如何使用Active Directory Universal with MFA支持连接到azure数据库

如果要将azure SQL数据库与Active Directory Universal with MFA连接,可以将SQL数据库与azure AD访问令牌连接。例如 1.注册web应用程序

  • 配置权限

  • 代码(我使用ADAL获取访问令牌) 静态void Main(字符串[]参数) {

    string authory=”https://login.microsoftonline.com/hanxia.onmicrosoft.com";
    AuthenticationContext authContext=新的AuthenticationContext(authory);
    Console.WriteLine(“获取令牌”);
    var result=GetTokenViaCode(authContext).result;
    var connection=new-SqlConnection(“数据源=[my database].database.windows.net;初始目录=[my Initial Catalog];”;
    connection.AccessToken=result.AccessToken;
    connection.Open();
    Console.WriteLine();
    }
    
    静态异步任务

    您必须使用MSAL库来获取SQL DB的访问令牌。连接字符串中不应指定用户名或密码。好的,谢谢。我试试看。
        string authory = "https://login.microsoftonline.com/hanxia.onmicrosoft.com";
    
        AuthenticationContext authContext = new AuthenticationContext(authory);
    
        Console.WriteLine("get token");
        var result = GetTokenViaCode(authContext).Result;
    
        var connection = new SqlConnection("Data Source=[my database].database.windows.net;Initial Catalog=[my initial catalog];");
        connection.AccessToken = result.AccessToken;
        connection.Open();
    
        Console.WriteLine();
    }
    
    static async Task<AuthenticationResult> GetTokenViaCode(AuthenticationContext ctx)
    {
        string resource = "https://database.windows.net";
        string clientId = "2c4aae8f-392c-419a-b454-8f8c1ff1ec0c";
        AuthenticationResult result = null;
        try
        {
            DeviceCodeResult codeResult = await ctx.AcquireDeviceCodeAsync(resource, clientId);
            Console.ResetColor();
            Console.WriteLine("You need to sign in.");
            Console.WriteLine("Message: " + codeResult.Message + "\n");
            result = await ctx.AcquireTokenByDeviceCodeAsync(codeResult);
        }
        catch (Exception exc)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Something went wrong.");
            Console.WriteLine("Message: " + exc.Message + "\n");
        }
        return result;
    }