![](/img/trans.png)
[英]Managed Identity Sql Auth with EF Core - Login failed for user '<token-identified principal>'
[英]Microsoft.Data.SqlClient.SqlException (0x80131904): Login failed for user '<token-identified principal>'. Token is expired
我正在使用實體框架連接到 Azure SQL 數據庫,並且我正在使用訪問令牌(通過托管身份獲得)進行連接。
我沒有在 SQL 連接字符串中使用用戶名和密碼,也沒有使用托管身份並將 SQL 連接字符串保留在 Azure keyvault 中。
我正在使用如下所示的令牌連接到數據庫,但一個小時后它就過期了,所以我收到“SQL 登錄失敗 - ”錯誤。
一旦連接到數據庫,我有一個長時間運行的進程,它從一些表中收集一些配置數據,超過 45 分鍾后,我需要更新數據庫中的數據。 嘗試使用dbcontext
保存更改時,代碼拋出此超時問題。
如何獲取新的刷新令牌並設置為連接?
public SqlConnection GetDBConnection()
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = Environment.GetEnvironmentVariable("SqlConnectionString");
var credential = new DefaultAzureCredential();
var accessToken = credential.GetToken(new TokenRequestContext(new[] { "https://database.windows.net/.default" }));
conn.AccessToken = accessToken.Token;
return conn;
}
我們需要確保在作業完成之前連接不會關閉,並且當我們運行長進程時遇到任何連接問題時,它可能會過期。
因此,當我們在評論部分獲得一些見解以使用“USING”時。 這是可以做到的。
下面是我們如何使用它進行連接,主要用於 SQL:
using (SqlConnection conn = new SqlConnection(...))
{
using(SqlCommand cmd = new SqlCommand(..., conn))
{
conn.Open();
using(DataReader dr = cmd.ExecuteReader()) // or load a DataTable, ExecuteScalar, etc.
{
...
{
}
}
還要使用 Azure SQL 數據庫檢查AAD 身份驗證,因為我們已經看到令牌識別主體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.