Аутентификация в BlobServiceClient с помощью ClientSecretCredential в собственном приложении - PullRequest
1 голос
/ 01 августа 2020

Я пытаюсь пройти аутентификацию в хранилище больших двоичных объектов azure в собственном приложении. net. Следующий код дает ошибку 403. Я не вижу запущенных процессов аутентификации (например, нет согласия или приглашения TFA), но, возможно, этого не следует ожидать. Регистрация клиента настроена как собственное приложение с областью user_impersonation. Мне интересно, какие шаги я должен предпринять для устранения неполадок.

var credential = new ClientSecretCredential(tenantid, appid, clientSecret);                                
client = new BlobServiceClient(accountUri, credential);

// Make a service request to verify we've successfully authenticated
var foo= await client.GetPropertiesAsync();

Ответ:

Azure.RequestFailedException: This request is not authorized to perform this operation using this permission.
RequestId:73e54cff-401e-004d-7211-685a00000000
Time:2020-08-01T14:37:01.2280787Z
Status: 403 (This request is not authorized to perform this operation using this permission.)
ErrorCode: AuthorizationPermissionMismatch

Headers:
x-ms-request-id: 73e54cff-401e-004d-7211-685a00000000
x-ms-client-request-id: a9a34270-db76-424b-ac33-750b2cdb2ffb
x-ms-version: 2019-12-12
x-ms-error-code: AuthorizationPermissionMismatch
Date: Sat, 01 Aug 2020 14:37:00 GMT
Server: Windows-Azure-Blob/1.0,Microsoft-HTTPAPI/2.0
Content-Length: 279
Content-Type: application/xml

1 Ответ

1 голос
/ 03 августа 2020

Если вы хотите, чтобы поток учетных данных клиента имел доступ к хранилищу Azure, нам необходимо назначить Azure RAB C роль (участник данных BLOB-объектов хранилища) приложению Azure AD. Дополнительные сведения см. В документе

Например

  1. Зарегистрируйте Azure приложение AD через Azure Портал .

  2. Создать секрет клиента для приложения

  3. Azure RAB C роль (Хранилище Blob Data Contributor) в приложение Azure AD. enter image description here

  4. Code

var clientId = "42e0d***2d988c4";
            var secret = "Gbx2***fQpIjoae:";
            var tenant = "e4c9ab4***2a757fb";

            ClientSecretCredential credential = new ClientSecretCredential(tenant, clientId, secret);
            string accountName = "jimtestdiag924";

            string url = string.Format("https://{0}.blob.core.windows.net/", accountName);
            var client = new BlobServiceClient(new Uri(url), credential);

            var foo = await client.GetPropertiesAsync();

введите описание изображения здесь

...