gpt4 book ai didi

java - 批量制作 Azure IoT 中心设备标识时出错

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:58 25 4
gpt4 key购买 nike

我正在关注https://learn.microsoft.com/en-us/azure/iot-hub/iot-hub-bulk-identity-mgmt在 Azure IoT 中心批量上传设备标识。此处给出的所有代码均采用 C# 编写,因此我将其转换为等效的 JAVA 代码。

使用导入设备示例 - 批量设备配置我得到以下 json-

{"id":"d3d78b0d-6c8c-4ef5-a321-91fbb6a4b7d1","importMode":"create","status":"enabled","authentication":{"symmetricKey":{"primaryKey":"f8/UZcYbhPxnNdbSl2J+0Q==","secondaryKey":"lbq4Y4Z8qWmfUxAQjRsDjw=="}}}
{"id":"70bbe407-8d65-4f57-936f-ef402aa66d07","importMode":"create","status":"enabled","authentication":{"symmetricKey":{"primaryKey":"9e7fDNIFbMu/NmOfxo/vGg==","secondaryKey":"nwFiKR4HV9KYHzkeyu8nLA=="}}}

要从 blob 导入文件,调用以下函数 -

CompletableFuture<JobProperties> importJob = registryManager
.importDevicesAsync(inURI, outURI);

在上面的代码中,我们需要提供带有 SAS 代码的 URI,因为获取容器 SAS URI 等效代码如下 -

static String GetContainerSasUri(CloudBlobContainer container) {
SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();
sasConstraints.setSharedAccessExpiryTime(new Date(new Date().getTime() + TimeUnit.DAYS.toMillis(1)));
sasConstraints.setPermissions(EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.WRITE,
SharedAccessBlobPermissions.LIST, SharedAccessBlobPermissions.DELETE));

BlobContainerPermissions permissions = new BlobContainerPermissions();
permissions.setPublicAccess(BlobContainerPublicAccessType.CONTAINER);
permissions.getSharedAccessPolicies().put("testpolicy", sasConstraints);
try {
container.uploadPermissions(permissions);
} catch (StorageException e1) {
e1.printStackTrace();
}
String sasContainerToken = null;
try {
sasContainerToken = container.generateSharedAccessSignature(sasConstraints, "testpolicy");
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (StorageException e) {
e.printStackTrace();
}
System.out.println("URI " + container.getUri() +"?"+ sasContainerToken);
return container.getUri() + "?" + sasContainerToken;
}

现在问题就来了。对于输出容器,我收到以下错误 -

java.util.concurrent.ExecutionException: com.microsoft.azure.sdk.iot.service.exceptions.IotHubBadFormatException: Bad message format! ErrorCode:BlobContainerValidationError;Unauthorized to write to output blob container. Tracking ID:2dcb2efbf1e14e33ba60dc8415dc03c3-G:4-TimeStamp:11/08/2017 16:16:10

请帮助我了解为什么会收到消息格式错误错误? SAS key 生成代码是否存在问题,或者我的 Blob 容器没有写入权限?

最佳答案

您使用的是服务还是帐户级 SAS?引发的错误表明该服务未获得授权或没有委派权限来写入指定的 blob 容器。查看此处的资源,了解如何设置帐户级 SAS 以及如何委派对 Blob 容器的读取、写入和删除操作。 https://learn.microsoft.com/en-us/rest/api/storageservices/Delegating-Access-with-a-Shared-Access-Signature?redirectedfrom=MSDN ”片段内容:“帐户级 SAS,于 2015-04-05 版本引入。帐户 SAS 委派对一项或多项存储服务中的资源的访问权限。通过服务 SAS 进行的所有操作也可以通过帐户 SAS 进行。此外,通过帐户 SAS,您可以委派对适用于给定服务的操作的访问权限,例如获取/设置服务属性和获取服务统计信息。您还可以委派对服务 SAS 不允许的 Blob 容器、表、队列和文件共享的读取、写入和删除操作的访问权限。有关帐户 SAS 的更多信息,请参阅构建帐户 SAS。”

关于java - 批量制作 Azure IoT 中心设备标识时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47185003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com