Автоматическое создание подписи общего доступа SAS - PullRequest
1 голос
/ 20 марта 2020

У меня небольшая проблема. Наша компания использует Azure Logi c Apps + Azure SQL Store Процедуры для загрузки данных в Azure SQL Таблицы из Azure Blob Storage. Данные генерируются с помощью сценариев PowerShell в формате .csv на локальных серверах и отправляются в Azure хранилище BLOB-объектов через AZCOPY. AZCOPY использует SAS Token. Azure SQL использует токен SAS для доступа к внешним источникам данных. Мой вопрос - возможно ли как-то сгенерировать токен SAS и следующим шагом выполнить запрос на SQL сервере с новым токеном?

ПОЛНАЯ БАЗА ДАННЫХ ИЗМЕНЕННОЙ БАЗЫ BLOBCredential С ИДЕНТИЧНОСТЬЮ = 'ПОДПИСАННАЯ ДОСТУПНАЯ ПОДПИСЬ', SECRET = 'sv = SAS_TOKEN';

Я знаю, что токен в AZCOPY не может автоматически обновляться, и я получу обновить его вручную.

Прошу прощения за мой английский sh.

Спасибо за мнения! Petr

1 Ответ

0 голосов
/ 20 марта 2020

Это способ подключения к Azure SQL DB.

string ConnectionString =@"Data Source=n9lxnyuzhv.database.windows.net; Initial Catalog=testdb;"
SqlConnection conn = new SqlConnection(ConnectionString);
conn.AccessToken = "Your JWT token"
conn.Open();

Для токена JWT: найдите поток OAuth Grant для Azure AD. Существует несколько примеров того, как получить токен, обычно для них требуется секрет клиента (пароль) или сертификат.

Вы можете установить сертификат на своих виртуальных машинах OnPremise. Здесь вы можете узнать, как получить токен с клиентским сертификатом.

https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Client-credential-flows#construction конфиденциальных учетных данных приложения клиента с клиентом

var app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
           .WithAuthority(AzureCloudInstance.AzurePublic, "{tenantID}")
           .WithClientSecret(config.ClientSecret)
           .Build();

X509Certificate2 certificate = ReadCertificate(config.CertificateName);
var app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
           .WithAuthority(AzureCloudInstance.AzurePublic, "{tenantID}")
           .WithCertificate(certificate)
           .Build();

string[] scopes = new string[] { "https://graph.microsoft.com/.default" };

AuthenticationResult result = null;
try
{
 result = await app.AcquireTokenForClient(scopes)
                   .ExecuteAsync();
}
catch(MsalServiceException ex)
{
 // Case when ex.Message contains:
 // AADSTS70011 Invalid scope. The scope has to be of the form "https://resourceUrl/.default"
 // Mitigation: change the scope to be as expected
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...