Azure Managed Identity не работает с классами DB * - PullRequest
0 голосов
/ 17 июня 2020

Я использую Azure управляемое удостоверение, чтобы предоставить azure sql db доступ к службе приложений. Я включил удостоверение и предоставил доступ к субъекту службы из группы пользователей. Теперь, когда я пытаюсь получить токен доступа от поставщика токенов Azure с использованием классов db *, он не работает, но если я использую классы sql*, служба работает как шарм. Я не могу найти ничего, почему это так.

Игнорировать имена переменных.

Код, который не работает:

    SqlDatabase db = new SqlDatabase(****CONNECTIONSTRING****);
                    using (DbConnection conn1 = db.CreateConnection())
                    {
                        var conn = (SqlConnection)conn1;
                        conn.AccessToken = (new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync("***").Result;
                        if (conn.State == ConnectionState.Closed) conn.Open();
                        using (DbCommand dbcmd = db.GetStoredProcCommand("dbo.AllCustomerTypeGet"))
                        {
                            //Insert Record in Debug Log table
                            InsertDebugLog(dbcmd, LoginUser, true, IsRequiredLog);
..........
........
......

И код, который работает:

using (SqlConnection conn = new SqlConnection(****CONNECTIONSTRING****))
                {
                    conn.AccessToken = (new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync("***").Result;
                    if (conn.State == ConnectionState.Closed) conn.Open();

                    using (SqlCommand cmd = new SqlCommand("dbo.AllCustomerTypeGet", conn))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        using (SqlDataReader rdr = cmd.ExecuteReader())
........
........
........

Это управляемая идентификация, предназначенная для работы с определенными c классами баз данных, а не с более общими c, такими как dbconnection, dbcommand et c?

...