如何通过MFA支持.Net Core连接Azure数据库与Active Directory-Universal

问题描述 投票:0回答:2

我正在尝试连接到天蓝色数据库。 我当前的连接字符串 "return $"密码={this.Password};持久安全信息=True;用户ID = { this.User };初始目录 = { this.Database };数据源 = { this.Server }";"像这样。如何使用具有 MFA 支持的 Active Directory-Universal 连接到 azure 数据库

azure .net-core database-connection azure-database-mysql
2个回答
0
投票

如果您想通过 MFA 连接 Azure SQL 数据库与 Active Directory-Universal,您可以使用 Azure AD 访问令牌连接 SQL 数据库。例如 1. 注册一个网络应用程序

  1. 配置权限

  2. 代码(我使用ADAL来获取访问令牌) 静态无效主(字符串[]参数) {

        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;
    }
    

请注意,我在控制台应用程序中测试它,因此我使用设备代码流来获取访问令牌。如果你想在Web应用程序中使用它,你可以使用OpenID flow来实现它。更多详情请参阅样本


0
投票

接受的答案是针对应用程序的,但如果您需要执行一次,并且您正在使用 .net 5+,您可能需要从

切换

using System.Data.SqlClient;
using Microsoft.Data.SqlClient;

并使用如docs中所示的连接字符串,这将提示用户在浏览器窗口中登录。

// Use your own server, database, and user ID.
// User ID is optional.
string ConnectionString1 = @"Server=demo.database.windows.net; Authentication=Active Directory Interactive; Encrypt=True; Database=testdb; User [email protected]";

using (SqlConnection conn = new SqlConnection(ConnectionString1)) {
    conn.Open();
}

// User ID is not provided.
string ConnectionString2 = @"Server=demo.database.windows.net; Authentication=Active Directory Interactive; Encrypt=True; Database=testdb";

using (SqlConnection conn = new SqlConnection(ConnectionString2)) {
    conn.Open();
}
© www.soinside.com 2019 - 2024. All rights reserved.