【问题标题】:Azure Blob Storage functions suddenly giving 403 errorsAzure Blob 存储功能突然出现 403 错误
【发布时间】:2021-10-01 21:52:50
【问题描述】:

几个月前,我使用 javascript 编写了一个 api 端点来获取 Azure blob 的 saskey。从那以后它工作得很好。就在昨天,它开始给我 403 错误。我已经好几个月没有碰过这个文件了,也没有访问过我的 Azure 帐户来进行更改。在这里查看了一些帖子并检查了我的防火墙(配置正确),PC上的日期正确,甚至尝试重置并使用我的访问密钥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>

【问题讨论】:

  • 我不确定代码和拍摄方式在这里陷入黑暗..但可能是它返回了一个去掉特殊字符的 SAS 键?最近可能是 Azure 密码策略发生了一些变化。你确定这是不可能的吗?
  • SouravA,谢谢你的建议。问题是我不知道如何解决这个问题。即使有问题,MS 也会发回一个看起来与 sasKey 完全相同的响应。我的理解是,他们这样做是为了让黑客无法分辨好坏。问题是,我也不能!您对我如何验证 sasKey 有任何想法吗?
  • 使用 azure storage explorer 和通过 SaaS 密钥连接选项进行验证
  • 请编辑您的问题并包含 SAS URL(仅用随机字符串替换帐户名称)和您使用此 SAS URL 的代码。我昨天回答了一个类似的问题 (stackoverflow.com/questions/68510129/…),想看看您是否面临与 OP 在该问题中面临的相同问题。
  • Gaurav,我阅读了另一篇文章并决定尝试对其进行编码。工作!不敢相信我直到现在才遇到这个问题。在我的所有 Azure blob 存储问题上,您对我很有帮助。无法告诉你我有多感激。刚刚查看了您的个人资料。也许有一天我的应用会卖掉,我可以使用你的 Azure 管理工具来回报你。 :) 谢谢你的快速反应。不确定stackoverflow协议。我可以输入答案来结束问题。但你应该得到答案的功劳。您要发布答案以便我投票吗?

标签: azure azure-blob-storage


【解决方案1】:

Gaurav Mantri 在 cmets 中为我找到了答案。我使用了 url 编码,它解决了这个问题。

【讨论】:

    猜你喜欢
    • 2020-05-09
    • 2017-03-02
    • 2013-01-15
    • 2020-09-12
    • 1970-01-01
    • 2018-12-28
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多