簡體   English   中英

無法通過 Azure Active Directory 連接到 SQL Server 數據庫

[英]Not able to connect to SQL Server database through Azure Active Directory

我是 Azure AD 的新手,我正在嘗試通過 C#、.NET Core、EF 應用程序中的 AAD 連接到 SQL Server 數據庫。 我不確定這是否是通過 AAD 連接到 SQL Server 數據庫的正確方法,但下面是我在DbContext中編寫的代碼:

public static void TestConnection1(IConfiguration config)
{    
    ClientCredential cc = new ClientCredential(clientId, "secretValue");
    var context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId);
    var result = context.AcquireTokenAsync("https://management.azure.com", cc);
    var accessToken = result.Result.AccessToken;

    var sqlConnectionString = GetConnectionString(config);

    using var connection = new SqlConnection(sqlConnectionString)
    {
        AccessToken = accessToken
    };
    
    connection.Open();   
}

我收到此錯誤:

System.Data.SqlClient.SqlException (0x80131904):用戶“”登錄失敗。 不正確或無效的令牌。

在 System.Data.ProviderBase.DbConnectionPool.CheckPoolBlockingPeriod(異常 e)
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject、DbConnectionOptions userOptions、DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、UInt32 waitForMultipleObjectsTimeout、Boolean allowCreate、Boolean onlyOneCheckConnection、DbConnectionOptions userOptions、DbConnectionInternal& 連接)

這是通過 AAD 連接的正確連接方式嗎?

我有 clientId、tenant 等的應用程序注冊

我還嘗試使用DefaultAzureCredential創建令牌,但我們必須在下面輸入哪個 URL?

另外,我需要在哪里輸入 clientId、tenant 等以便生成令牌?

var defaultCredential = new DefaultAzureCredential();
var token = defaultCredential.GetToken(new TokenRequestContext(new [] { "???????"})).Token;

誰能幫幫我? 提前致謝。

以我的拙見,我們不需要在代碼中為 Azure 數據庫設置 AAD 身份驗證。 AAD 身份驗證是在 Azure 門戶中登錄數據庫的解決方案之一。 當我們要在 Azure 門戶中訪問 Azure 數據庫時,我們需要輸入用戶名/密碼或使用 AAD 身份驗證。

如果我們需要在代碼中連接到 Azure 數據庫,我們通常使用始終在 appsetting.json 文件中設置的連接字符串。 同時,我們還需要為應用IP地址設置防火牆,以便您的應用能夠訪問數據庫。 此示例展示了如何使用用戶名/密碼查詢數據庫,但由於您使用的是 EF 核心,因此您只需要獲取連接字符串即可。

你可能擔心連接字符串在你的應用程序中是硬編碼的,那么你可以選擇將連接字符串存儲到 Azure 密鑰保管庫中。 然后代碼片段DefaultAzureCredential可用於獲取存儲在 Azure 密鑰保管庫中的機密

最后,您可能希望將您的應用程序發布到 Azure APP 服務,那么只需按照本教程進行操作即可。 發布后,請不要忘記將 IP 地址添加到數據庫防火牆中。

您正在請求錯誤的范圍,它應該是 database.windows.net - 但只需使用 Microsoft.Data.SqlClient 和合適的連接字符串:

https://learn.microsoft.com/en-us/sql/connect/ado-net/sql/azure-active-directory-authentication?view=sql-server-ver16

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM