java - Azure Blob 存储出现 403 错误服务器无法对请求进行身份验证
问题描述
我目前正在执行 SAS URL 的突发活动,以从 Azure 上传、下载和删除 blob,但某些 URL 返回 403 错误
“服务器未能对请求进行身份验证。确保 Authorization 标头的值正确形成,包括签名。”
我已经创建了正确的 SAS 并执行了 URL,但仍然不确定如何修复它,因为我生成了类似这样的 URL
这是我的示例代码,用于生成 SAS URL 以进行上传并执行它:
public static URL generateUploadSignedURL(String filename, String userId) throws URISyntaxException, StorageException, InvalidKeyException, MalformedURLException {
CloudBlobContainer container = cloudBlobAdmin.getContainerReference(bucketData);
CloudBlockBlob blob = container.getBlockBlobReference(filename);
SharedAccessBlobPolicy sasPolicy = new SharedAccessBlobPolicy();
Instant instant = Instant.now();
sasPolicy.setSharedAccessStartTime(Date.from(instant));
sasPolicy.setSharedAccessExpiryTime(Date.from(instant.plus(1, ChronoUnit.HOURS))); // Use the start time delta one hour as the end time for the shared
sasPolicy.setPermissions(EnumSet.of(
SharedAccessBlobPermissions.WRITE)
);
String token = blob.generateSharedAccessSignature(sasPolicy, null);
String url = blob.getUri()+"?"+token;
System.out.println(blob.getUri()+"?"+token);
return new URL(url);
}
public static int uploadFileWithUrl(InputStream inputStream, URL url) throws IOException {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
if (url.toString().contains("blob.core.windows.net")) { // for azure urls add request property
connection.setRequestProperty("x-ms-blob-type", "BlockBlob");
}
connection.setRequestProperty("User-Agent", "Multi-Cloud-Management-SignedURL");
File tempFile = new File("src/main/resources/input.tmp");
FileUtils.copyInputStreamToFile(inputStream, tempFile);
DataOutputStream out = new DataOutputStream (connection.getOutputStream());
out.write(Files.readAllBytes(Paths.get(tempFile.toURI())));
out.close();
connection.getResponseCode();
//System.out.println("HTTP response code: " + connection.getResponseCode());
connection.disconnect();
tempFile.delete();
return connection.getResponseCode();
}
解决方案
推荐阅读
- java - 在 Java Springboot 中将 CSV 转换为 JSON 数组
- python - 为什么此代码不适用于所有情况?
- php - wp_redirect 导致“无法修改标头信息”
- scala - 在使用 Apache POI Scala 写入值后,使用日期打开 excel 单元格时出现问题
- mysql - 使用多个表和限制选项更新查询
- javascript - 无法从 selenium webdriver 的 Kendo 下拉菜单中选择一个选项
- compiler-errors - F# Implicit ModuleSuffix not working when using fully qualified name
- python - 在python中,如何减去两列具有时间值的excel文件并创建它的新列?
- swift - 在 Core Data 中检索具有过滤子级的父级
- python - 多线程使我的代码有一些问题