具有 NPM azure-storage 的 Azure 文件不返回访问令牌
Posted
技术标签:
【中文标题】具有 NPM azure-storage 的 Azure 文件不返回访问令牌【英文标题】:Azure Files with NPM azure-storage doesn't return access token 【发布时间】:2019-12-03 20:50:21 【问题描述】:NPM azure-storage 版本为 2.10.3
以下代码尝试在现有共享、目录和文件上生成 SAS 令牌。代码运行完成,但不返回令牌。
我正在使用 console.log 来查看它在哪里停止。唯一的日志是第一个:即将生成令牌。
我正在构建一个成功添加和删除文件的类 - 这部分有效。仅仅获得 SAS 令牌不会做任何事情——它不会失败——它不会成功。
为什么它甚至没有出错?如何获得令牌?
const azure = require('azure-storage');
try
const connectionString = "xxx";
const share = "yyy";
const directory = "this-is-a-test";
const file = "short_en.mp3";
var startDate = new Date();
var expiryDate = new Date(startDate);
expiryDate.setMinutes(startDate.getMinutes() + 100);
startDate.setMinutes(startDate.getMinutes() - 100);
const sharedAccessPolicy =
AccessPolicy:
Permissions: azure.FileUtilities.SharedAccessPermissions.READ,
Start: startDate,
Expiry: expiryDate
;
const fileService = new azure.FileService(connectionString);
console.log("about to generate token");
fileService.generateSharedAccessSignature(share, directory, file, sharedAccessPolicy, (error, result) =>
console.log("getting token response");
if(error) console.log(`result $JSON.stringify(error)`);
console.log(`result $JSON.stringify(result)`);
);
catch(err)
console.log(`result $JSON.stringify(err)`);
【问题讨论】:
【参考方案1】:您只启用了 READ,这是您想要的吗?
let startDate = new Date();
let expiryDate = new Date(startDate);
expiryDate.setFullYear(startDate.getFullYear() + 100);
startDate.setFullYear(startDate.getFullYear());
let sharedAccessPolicy =
AccessPolicy:
Permissions: azure.BlobUtilities.SharedAccessPermissions.READ + azure.BlobUtilities.SharedAccessPermissions.WRITE,
Start: startDate,
Expiry: expiryDate
,
;
您的日期格式是否正确?
还可以看看 Azure 中的指数重试功能
【讨论】:
【参考方案2】:问题是我认为 API 调用是异步的(使用等待)。它不是 - 它直接返回一个对象。我还找到了格式化开始和到期日期的示例代码。这是正确的代码。
const azure = require('azure-storage');
try
const connectionString = "xxx";
const share = "yyy";
const directory = "this-is-a-test";
const file = "short_en.mp3";
var startDate = new Date();
var expiryDate = new Date(startDate);
expiryDate.setMinutes(startDate.getMinutes() + 5);
var sharedAccessPolicy =
AccessPolicy:
Permissions: azure.FileUtilities.SharedAccessPermissions.READ,
Start: startDate,
Expiry: expiryDate
;
const fileService = new azure.FileService(connectionString);
console.log("about to generate token");
const accessToken = fileService.generateSharedAccessSignature(share, directory, file, sharedAccessPolicy);
console.log(`result $JSON.stringify(accessToken)`);
catch(err)
console.log(`result $JSON.stringify(err)`);
accessToken 看起来像,为安全起见缩短了 sig 的值:
"st=2019-07-25T18%3A39%3A41Z&se=2019-07-25T18%3A44%3A41Z&sp=r&sv=2018-03-28&sr=f&sig=C2k...NZgYA%3D"
【讨论】:
以上是关于具有 NPM azure-storage 的 Azure 文件不返回访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
在 Docker 中运行 Azure DevOps 作业时出现“找不到具有给定版本的模块 Az.Accounts”错误
具有 dotnet 隔离的 Az 功能的提琴手 - 启动 gRPC 调用时出错
Python Anaconda 和 azure-storage 模块
如何在 vaadin 框架中实现 azure-storage
有没有办法利用表(azure-storage)客户端 API 使用 CosmosDb 设置项目级别 TTL(生存时间)?