我正在尝试使用 DeviceUpdateClient (Azure.IoT.DeviceUpdate) 查询 IoT 中心的设备更新。
我正在使用基本的 hello world 示例和 ClientSecretCredential 来获取用于身份验证的令牌。
我已在 Azure AD 中注册了一个客户端应用程序,然后授予该帐户贡献者对 IoT 中心设备更新和 IoT 中心本身的访问权限。
Azure 的令牌身份验证工作正常。
当我按照示例查询提供商时,遇到 403 错误。代码和详细信息如下。
代码
Uri endpoint = new Uri("https://xxx-xxx-xxx-xx.api.adu.microsoft.com");
string instanceId = "xxx-xxx-Devicexxx-POC";
TokenCredential credentials = new ClientSecretCredential("xxx-xxx-xxx-xx-xxx", "xxx-xx-xx-xx-xx", "xx~xx.xx.xx-xx");
DeviceUpdateClient client = new DeviceUpdateClient(endpoint, instanceId, credentials);
Pageable<BinaryData> providers = client.GetProviders();
foreach (var provider in providers)
{
JsonDocument doc = JsonDocument.Parse(provider.ToMemory());
Console.WriteLine(doc.RootElement.GetString());
}
Console.Read();
错误
Service request failed.
Status: 403 (Forbidden)
Headers:
api-supported-versions: REDACTED
traceparent: xxx
Content-Length: 0
Date: Wed, 02 Aug 2023 10:28:58 GMT
This exception was originally thrown at this call stack:
Azure.Core.HttpPipelineExtensions.ProcessMessage(Azure.Core.Pipeline.HttpPipeline, Azure.Core.HttpMessage, Azure.RequestContext, System.Threading.CancellationToken)
Azure.IoT.DeviceUpdate.DeviceUpdateClient.GetProvidersImplementation.__CreateEnumerable|0(string, int?)
Azure.Core.PageableHelpers.EnumerableWithScope<T>.Enumerator.MoveNext()
我做错了什么?
对于遇到此问题的其他人
与应用程序注册关联的角色需要是设备更新管理员