Несанкционированное исключение при использовании DefaultAzureCredential только с включенным AzureCliCredential
я использую
DefaultAzureCredential
из
Azure.Identity
только с
AzureCliCredential
включен, чтобы разрешить проверку подлинности в Azure Active Directory с помощью Azure CLI для получения токена доступа.
Затем экземпляр
RegistryManager
для IoTHub создается с учетными данными для получения списка устройств, зарегистрированных в конкретном ресурсе IoTHub.
Код показан ниже:
namespace default_azure_credential_repro
{
using System;
using System.Threading.Tasks;
using Microsoft.Azure.Devices;
using Azure.Identity;
class Program
{
static async Task Main(string[] args)
{
var credential = new DefaultAzureCredential(
new DefaultAzureCredentialOptions {
ExcludeVisualStudioCredential = true,
ExcludeVisualStudioCodeCredential = true,
ExcludeAzurePowerShellCredential = true,
ExcludeEnvironmentCredential = true,
ExcludeSharedTokenCacheCredential = true,
ExcludeManagedIdentityCredential = true,
}
);
var hostName = "{host name here}";
var manager = RegistryManager.Create(hostName, credential);
var query = manager.CreateQuery("select * from devices", 100);
while (query.HasMoreResults) {
foreach (var device in await query.GetNextAsTwinAsync()) {
Console.WriteLine(device.DeviceId);
}
}
}
}
}
Когда я запустил приведенный выше код, я получил следующую ошибку, указывающую на то, что токен доступа не имеет разрешения на вызов API, необходимого для запроса устройств.
Unhandled exception. Microsoft.Azure.Devices.Common.Exceptions.UnauthorizedException: {"Message":"{\"errorCode\":401003,\"trackingId\":\"{trackingIdHere}\",\"message\":\"Principal live.com#myemailaddress@example.com is not authorized for POST on /devices/query due to no assigned permissions\",\"timestampUtc\":\"2021-05-29T13:33:29.0065016Z\"}","ExceptionMessage":""}
Но я могу перечислить устройства с помощью z cli, используя следующую команду.
$ az iot hub device-identity list -n {resource name here}
Почему моя программа не работает, но запускается az cli успешно? Заранее спасибо.