几个月前,我使用 javascript 编写了一个 api 端点来获取 Azure blob 的 saskey。从那时起它就运作良好。就在昨天,它开始出现 403 错误。我已经好几个月没有碰过该文件了,也没有访问我的 Azure 帐户进行更改。在这里查看了一些帖子并检查了我的防火墙(正确配置),PC上的日期是否正确,甚至尝试重置并使用我的访问 key 2。仍然遇到同样的错误。 Azure 使用 saskey 进行响应,但它无效。任何有关如何解决此问题的建议将不胜感激。代码如下:
api.js(mediaLoc 是文件名):
app.get("/getSASKey", checkAuth, async function (req, res) {
var mediaLoc = req.query.mediaLoc;
console.log('mediaLoc is: ', mediaLoc)
blobResult = await bloboperations.sasKey(mediaLoc).then((result) => {
console.log('api about to send sasKey back as: ', result)
res.send(result);
});
});
bloboperations.sasKey:
async function sasKey(mediaLoc) {
try {
console.log('starting sasKey in bloboperations mediaLoc:', mediaLoc)
var storage = require("@azure/storage-blob")
const accountname = process.env.BLOB_ACCT_NAME;
const key = process.env.BLOB_KEY;
const cerds = new storage.StorageSharedKeyCredential(accountname,key);
const blobServiceClient = new storage.BlobServiceClient(`https://${accountname}.blob.core.windows.net`,cerds);
const containerName="dev";
const client =blobServiceClient.getContainerClient(containerName)
const blobName=mediaLoc;
const blobClient = client.getBlobClient(blobName);
const blobSAS = storage.generateBlobSASQueryParameters({
containerName,
blobName,
permissions: storage.BlobSASPermissions.parse("racwd"),
startsOn: new Date(),
expiresOn: new Date(new Date().valueOf() + 86400)
},
cerds
).toString();
const sasUrl= blobClient.url+"?"+blobSAS;
return sasUrl
}
catch (error) {
console.log(error);
}
}
编辑/附加信息: 当我发布此编辑后,我以为我在 URL 中看到了空格。仔细查看并将其复制到记事本后,我发现根本没有空格。太糟糕了,我希望事情能这么简单!
我从 Azure 返回的 saskey 是:
sv=2020-06-12&st=2021-07-25T20%3A58%3A53Z&se=2021-07-25T21%3A00%3A20Z&sr=b&sp=racwd&sig=q6ylvdvxFKuR1zHmK2sa%2FwjlDjRoqtA6Jt47vZ0pQt4%3D
我将其附加到:https://MYACCTHERE.blob.core.windows.net/dev/0f0djx0dshmp316324a060040a9b1624826368094.jpg?
(0f0djx0dshmp316324a060040a9b1624826368094.jpg 是 Azure 上的 blob 名称。)
获取网址:
https://s4udev.blob.core.windows.net/dev/0f0djx0dshmp316324a060040a9b1624826368094.jpg?sv=2020-06-12&st=2021-07-25T20%3A58%3A53Z&se=2021-07-25T21%3A00%3A20Z&sr=b&sp=racwd&sig=q6ylvdvxFKuR1zHmK2sa%2FwjlDjRoqtA6Jt47vZ0pQt4%3D
(显然,这是昨天的,所以它已经过期了。)在生成它时,我尝试将其直接复制并粘贴到浏览器地址行中,但出现了相同的 403 错误。
我在前端使用Vue2。该 url 作为变量 sasKey 传递给 Vue,并使用以下代码放置在页面上:
<v-img
class="white--text align-end imageTag"
max-width="10rem"
height="100%"
:src="sasKey"
>
</v-img>
最佳答案
我的答案是在 Gaurav Mantri 的评论中找到的。我使用了 url 编码,它解决了问题。
关于Azure Blob 存储功能突然出现 403 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68521718/