如何将授权标头添加到SAS URI?

时间:2018-04-16 06:31:07

标签: azure azure-iot-hub

我正在开发一个POC,我必须创建一个模拟设备并连接到IOT HUB,这部分是在一些外部应用程序向该设备的IOT HUB发送消息之后完成的。

消息包含blob存储SAS URI,我需要将该文件下载到设备。

模拟设备能够获取SAS URI,但当我开始下载文件时,我得到错误。

线程“main”中的异常com.microsoft.azure.storage.StorageException:服务器无法验证请求。确保正确形成Authorization标头的值,包括签名。

如果我的方法是错误的,请纠正我,并为此用例使用适当的approch纠正我。

private static void download(String message) throws StorageException, IOException, JSONException, URISyntaxException {
    // need to download the file to simulator in folder
    try {
        JSONObject jsonObject = new JSONObject(message);
        String sasUri = (String) jsonObject.get("fileUrl");
        System.out.println("SAS URI from hub ->" + sasUri + "  ");
        URI url = new URI(sasUri);
        //downloadFile(sasUri);
        System.out.println("end of file download function");
        CloudBlob blob = new CloudBlockBlob(url);
        blob.downloadToFile("/path/to/download/file");
    } catch(Exception e) {
        e.printStackTrace();
    }
}

以下是SAS URI: -

的https://*******.blob.core.windows.net/test/testfile.zip SV = 2017年7月29日&安培; SS = B和= SRT SCO&安培; SP =&rwdlac放大器; SE = 2018-04-16T13:33:22Z&安培; ST = 2018-04-16T05:00:22Z&安培; SPR = HTTPS&安培; SIG = ***********

我直接从azure portal获取SAS URI,而不是在运行时生成。

提前致谢!

1 个答案:

答案 0 :(得分:0)

要缩小问题范围,您可以尝试使用以下方法来查看是否有帮助。

单击“下载”,在Azure门户中获取blob的URI:

enter image description here

之后,将下载该文件。您可以在资源管理器下载历史记录中找到URI。 URI格式将是这样的:

https://[storage-account].blob.core.windows.net/testdownload/20180417_4.zip?sv=2017-07-29&ss=bqtf&srt=sco&sp=rwdlacup&se=2018-04-19T15:52:15Z&sig=[signature]

在以下代码段中直接使用此URI,它将起作用。

            CloudBlob blob = new CloudBlockBlob(url);
            await blob.DownloadToFileAsync(imgPath, System.IO.FileMode.CreateNew);

Upate:从Azure门户获取绝对URI到blob 的另一种方法如下:

首先获得 SAS令牌。请注意开始和到期日期/时间。该令牌仅在此时间段内有效。

enter image description here

第二次获取 blob网址

enter image description here

最后,blob的完整绝对URI blob网址加上 SAS令牌。它会是这样的:

https://ritastorageaccount.blob.core.windows.net/?sv=2017-07-29&ss=b&srt=sco&sp=rwdlac&se=2018-04-26T10:01:47Z&st=2018-04-26T02:01:47Z&spr=https&sig=[SIG]