Azure java:找不到指定签名标识符的SAS标识符

Azure java:找不到指定签名标识符的SAS标识符,java,azure,azure-storage-blobs,azure-java-sdk,Java,Azure,Azure Storage Blobs,Azure Java Sdk,我正在使用SDK for java创建SAS以访问blob。 代码如下: SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy(); policy.setPermissionsFromString("r"); Calendar date = Calendar.getInstance(); Date expire = new Date(date.getTimeInMillis() + (expirationMinutes * 6000

我正在使用SDK for java创建SAS以访问blob。 代码如下:

SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy();
policy.setPermissionsFromString("r");
Calendar date = Calendar.getInstance();
Date expire = new Date(date.getTimeInMillis() + (expirationMinutes * 60000));
Date start = new Date(date.getTimeInMillis());
policy.setSharedAccessExpiryTime(expire);
policy.setSharedAccessStartTime(start);
return blob.getUri().toString()+"?"+blob.generateSharedAccessSignature(policy, externalFileName);
但当我尝试使用url访问blob时,会出现以下错误:

<Error>
<Code>AuthenticationFailed</Code>
<Message>
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:f1f169d2-0001-003f-115a-3be1d6000000 Time:2016-11-10T13:57:14.6192554Z
</Message>
<AuthenticationErrorDetail>
SAS identifier cannot be found for specified signed identifier
</AuthenticationErrorDetail>
</Error>
我在网上为同一个blob做了同样的事情,结果url(有效)与我在这里得到的不同:

不工作(java):

工程(净):


如何修复此问题?

仅查看SAS令牌,您正在使用文件名指定策略。这可能不是您想要做的,并且不在.NET SAS令牌中

我想问题就在这里:

blob.generateSharedAccessSignature(policy, externalFileName);
如果API类似于.NET,则第二个参数可能是策略名称

请尝试以下方法:

blob.generateSharedAccessSignature(policy, null);

只需查看SAS令牌,就可以使用文件名指定策略。这可能不是您想要做的,并且不在.NET SAS令牌中

我想问题就在这里:

blob.generateSharedAccessSignature(policy, externalFileName);
如果API类似于.NET,则第二个参数可能是策略名称

请尝试以下方法:

blob.generateSharedAccessSignature(policy, null);

在你上面提到的两个SAS URL中,你能告诉我哪一个有效吗?第二个,我将把它添加到问题中。在你上面提到的两个SAS URL中,你能告诉我哪一个有效吗?第二个,我将把它添加到问题中。谢谢,这就是问题所在。