[英]Error while making Azure IoT Hub Device Identities in bulk
我正在關注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=="}}}
要從 function 之后的 blob 導入文件,調用 -
CompletableFuture<JobProperties> importJob = registryManager
.importDevicesAsync(inURI, outURI);
在上面的代碼中,我們需要為 URI 提供 SAS 代碼,為此獲取容器 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;
}
現在問題來了。 對於 output 容器,我收到以下錯誤-
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
請幫助我知道為什么我收到Bad Message Format錯誤? SAS 密鑰生成代碼是否存在問題,或者我的 blob 容器沒有寫入權限?
您使用的是服務級還是帳戶級SAS? 引發的錯誤表明該服務未獲得授權或具有寫入指定Blob容器的委派權限。 在此處查看有關如何設置帳戶級別SAS以及如何委派對Blob容器進行讀取,寫入和刪除操作的資源。 https://docs.microsoft.com/zh-cn/rest/api/storageservices/Delegating-Access-with-a-Shared-Access-Signature?redirectedfrom=MSDN “內容摘錄:”帳戶級SAS,隨版本2015-04-05。 帳戶SAS委派對一項或多項存儲服務中的資源的訪問。 通過服務SAS可用的所有操作也可以通過帳戶SAS進行。 此外,使用帳戶SAS,您可以委派對適用於給定服務的操作的訪問權限,例如“獲取/設置服務屬性”和“獲取服務狀態”。 您還可以委派對服務SAS不允許的Blob容器,表,隊列和文件共享的讀取,寫入和刪除操作的訪問權限。 有關帳戶SAS的更多信息,請參閱構建帳戶SAS。”
我在使用私有存儲帳戶作為導入/輸出容器時遇到了同樣的問題。
在我開始使用公共存儲帳戶后,它工作順利。 無論如何,即使使用私人存儲帳戶也應該可以使用。 所以,我提出了一個問題。 有關更多信息,您可以參考此鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.