小编sea*_*tic的帖子

在Java中生成SAS令牌以下载Azure数据存储容器中的文件

尝试生成SAS令牌以访问存储帐户中的某些文件。我正在使用这里列出的方法:

https://docs.microsoft.com/zh-cn/rest/api/eventhub/generate-sas-token

现在,我的问题是,在我的一生中,我无法使sasToken字符串正常工作。如果我通过门户网站(存储帐户中的共享访问签名)生成令牌,则可以通过带有提供的令牌的URL访问这些文件。

但是,我还不能使用上面链接的方法通过Java以编程方式生成SAS令牌。我认为我的问题是正在加密的StringToSign。在构造要加密的字符串时,我一直遵循以下示例:

https://docs.microsoft.com/zh-cn/rest/api/storageservices/constructing-an-account-sas

我所有的努力导致了以下结果之一:

<AuthenticationErrorDetail>Signature fields not well formed.</AuthenticationErrorDetail>
Run Code Online (Sandbox Code Playgroud)

要么

<AuthenticationErrorDetail>Signature did not match. String to sign used was <insert string details here>
Run Code Online (Sandbox Code Playgroud)

查看门户生成的对我有用的sasToken:

?sv = 2017-11-09&ss = f&srt = o&sp = r&se = 2018-12-06T22:15:20Z&st = 2018-12-06T14:15:20Z&spr = https&sig =%2Bi1TWv5D80U%2BoaIeoBh1wjaO1p4xVFx4nRZtY%2Fzwis

看来我需要这样的字符串:

            String stringToSign = accountName + "\n" +
                "r\n" +
                "f\n" +
                "o\n" +
                URLEncoder.encode(start, "UTF-8") + "\n" +
                URLEncoder.encode(expiry, "UTF-8") + "\n" +
                "\n" +
                "https\n" +
                azureApiVersion;
Run Code Online (Sandbox Code Playgroud)

其中accountName是来自Azure的存储帐户名,而start / expiry是开始和到期字符串(即-2018-12-06T22:15:20Z),而azureApiVersion是“ 2017-11-09”。

然后,我尝试在像这样构造字符串之后返回令牌:

        String signature = getHMAC256(key, …
Run Code Online (Sandbox Code Playgroud)

java rest azure azure-storage

1
推荐指数
1
解决办法
1388
查看次数

标签 统计

azure ×1

azure-storage ×1

java ×1

rest ×1