C# Azure DeviceUpdateClient 403 禁止使用 ClientSecretCredential

问题描述 投票:0回答:1

我正在尝试使用 DeviceUpdateClient (Azure.IoT.DeviceUpdate) 查询 IoT 中心的设备更新。

MS SDK 文档

Hello World 示例

我正在使用基本的 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()

我做错了什么?

c# azure azure-iot-hub azure-iot-hub-device-update
1个回答
0
投票

对于遇到此问题的其他人

与应用程序注册关联的角色需要是设备更新管理员

© www.soinside.com 2019 - 2024. All rights reserved.