Если вы хотите получить доступ к REST API больших двоичных объектов Azure с аутентификацией Azure AD, выполните следующие действия.
- Назначьте
Storage Blob Data Contributor
пользователю или субъекту службы AD. Дополнительные сведения см. В здесь и здесь
az role assignment create \
--role "Storage Blob Data Contributor" \
--assignee " supported format: object id, user sign-in name, or service principal name." \
--scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>"
- Получите токен Azure AD
Если вы используете субъект-службу, мы можем получить токен доступа с помощью следующего API. Но обратите внимание, что если вы вызовете остальной API в приложении реакции, вы получите ошибку cors, и мы не сможем включить cors в Azure AD. Поэтому я предлагаю вам вызвать остальной API в серверном приложении
POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=
&scope=http//storage.azure.com/.default
&client_secret=
&grant_type=client_credentials
Если вы используете пользователя Azure AD, вы можете интегрировать аутентификацию Azure AD в свое приложение реакции с пакетом react-aad-msal
. Информацию о том, как его настроить, см. В образце
- Вызов API
try {
const azureRes = await axios({
method: 'GET',
url:
'https://<accountname>.blob.core.windows.net/?comp=list',
headers: {
'x-ms-version': '2017-11-09',
Authorization:
'Bearer <access_token>'
}
});
console.log('azureRes', azureRes);
} catch (err) {
console.log('err:', err);
}
Обновление. Чтобы узнать, как создать токен sas, см. следующий код.
- установить pcakge
crypto-js
npm install crypto-js
- код
import * as CryptoJS from 'crypto-js';
const accountName =<>;
const key=<>;
const start = new Date(new Date().getTime() - (15 * 60 * 1000));
const end = new Date(new Date().getTime() + (30 * 60 * 1000));
const signedpermissions = 'rwdlac';
const signedservice = 'b';
const signedresourcetype = 'sco';
const signedexpiry = end.toISOString().substring(0, end.toISOString().lastIndexOf('.')) + 'Z';
const signedProtocol = 'https';
const signedversion = '2018-03-28';
const StringToSign =
accountName+ '\n' +
signedpermissions + '\n' +
signedservice + '\n' +
signedresourcetype + '\n' +
'\n' +
signedexpiry + '\n' +
'\n' +
signedProtocol + '\n' +
signedversion + '\n';
var str =CryptoJS.HmacSHA256(StringToSign,CryptoJS.enc.Base64.parse(key));
var sig = CryptoJS.enc.Base64.stringify(str);
const sasToken =`sv=${(signedversion)}&ss=${(signedservice)}&srt=${(signedresourcetype)}&sp=${(signedpermissions)}&se=${encodeURIComponent(signedexpiry)}&spr=${(signedProtocol)}&sig=${encodeURIComponent(sig)}`;
const blobUrl= `<you blob URL>?{sasToken }`
person
Jim Xu
schedule
26.11.2020