2017-11-08 1 views
0

Azure IoT 허브에서 장치 ID 대량 업로드를 수행하려면 https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-bulk-identity-mgmt을 따르고 있습니다. 여기에 주어진 모든 코드는 C#에 있으므로 JAVA와 동등한 것으로 변환됩니다.Azure IoT 허브 장치 ID를 대량으로 만드는 중 오류가 발생했습니다.

가져 오기 장치의 예를 사용 - 대량 디바이스 프로비저닝 I 함수 다음 BLOB에서 파일을 가져 오려면

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=="}}} 

다음 무엇입니까 것은 위의 코드에서

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

입니다, SAS 코드가있는 URI를 제공해야합니다. 컨테이너 SAS URI를 가져 오십시오. 등가 코드는

입니다.3210
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 키 생성 코드에 문제가 있습니까, 아니면 BLOB 컨테이너에 쓰기 권한이 없습니까?

답변

0

서비스 또는 계정 단위 SAS를 사용하고 있습니까? throw 된 오류는 서비스가 승인되지 않았거나 지정된 Blob 컨테이너에 쓰기 권한을 위임 받았음을 나타냅니다. 계정 레벨 SAS를 설정하는 방법과 Blob 컨테이너에서 읽기, 쓰기 및 삭제 작업을 위임하는 방법에 대한 리소스를 확인하십시오. https://docs.microsoft.com/en-us/rest/api/storageservices/Delegating-Access-with-a-Shared-Access-Signature?redirectedfrom=MSDN "snipped 콘텐츠 :"2015-04-05 버전으로 소개 된 계정 단위 SAS 계정 SAS는 하나 이상의 스토리지 서비스에있는 리소스에 대한 액세스 권한을 위임합니다. 서비스 SAS를 통해 제공되는 모든 작업은 계정 SAS를 통해서도 가능합니다. 또한 계정 SAS를 사용하면 서비스 속성 가져 오기/설정 및 서비스 통계 가져 오기와 같은 특정 서비스에 적용되는 작업에 대한 액세스 권한을 위임 할 수 있습니다. 또한 서비스 SAS에서 허용되지 않는 BLOB 컨테이너, 테이블, 대기열 및 파일 공유에 대한 읽기, 쓰기 및 삭제 작업에 대한 액세스 권한을 위임 할 수 있습니다. 계정 SAS에 대한 자세한 내용은 계정 SAS 구성을 참조하십시오. "

관련 문제