簡體   English   中英

Azure SQL 使用 Azure Active Directory 進行身份驗證

[英]Azure SQL authentication using Azure Active Directory

使用時,按照本教程連接可以正常工作:

var connection = (SqlConnection)Database.GetDbConnection();
connection.AccessToken = (new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;

但現在文檔“不再推薦 Microsoft.Azure.Services.AppAuthentication”

因此,如Using Azure Active Directory authentication with SqlClient中所述更改我的連接,我收到以下錯誤:

托管用戶不支持集成 Windows 身份驗證。

嘗試使用托管身份獲取令牌。 無法獲取訪問令牌。 嘗試對無法訪問的網絡進行套接字操作。 (169.254.169.254:80)

沒有什么可以阻止該地址,但它從哪里獲得 IP? 本教程的代碼使用https://database.windows.net/來獲取令牌(解析 65.55.23.107)。

我可以/應該在某處覆蓋該地址嗎?
是否缺少其他配置?

這些身份驗證方式適用於不同的場景,例如,如果要使用Active Directory Integrated authentication ,則需要通過 ADFS 將本地 AD 與 Azure AD 聯合,如果要使用Active Directory Managed Identity authentication ,則必須運行您在支持 MSI 的 Azure 服務中的代碼(需要先啟用 MSI) ,因為代碼本質上是對 ZCF04A02E37B774FC311A48F608F608F608F608F608F605C3C597Z 進行了 API 調用,然后使用令牌實例訪問元數據端點MSI 支持的服務。

因此,如果您想將代碼從舊的 sdk 遷移到新的,您需要選擇適用於您的場景的正確身份驗證方式。 這里我推薦您使用Active Directory Service Principal authentication ,它可以適用於任何場景,請按照以下步驟操作。

1. 向 Azure AD 注冊應用程序並創建服務主體

2. 獲取登錄值創建新的應用程序密碼

3. 使用CREATE USER [Azure_AD_Object] FROM EXTERNAL PROVIDER 向服務主體授予權限

4.然后使用這里的代碼,用你的值修復從第2步得到的值。

string ConnectionString = @"Server=demo.database.windows.net; Authentication=Active Directory Service Principal; Database=testdb; User Id=AppId; Password=secret";

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

暫無
暫無

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

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