如何使用R语言AzureStor生成带sp前缀的有效SAS Token?
问题分析与解决
首先明确:SAS Token的参数顺序不影响有效性,不管是sv开头还是sp开头,只要参数正确就能正常使用——Azure门户和AzureStor生成的参数排列顺序不同,但功能完全一致。
你的代码里有几个关键问题需要修正:
有效期设置过短
你用Sys.time() +1设置过期时间,这意味着SAS生成后仅1秒就会过期,几乎无法使用。需要改成合理的时长,比如加3600秒(1小时)或者加几天:expiry = Sys.time() + 3600 # 1小时有效期 # 或者按天设置 expiry = Sys.Date() + 7 # 7天有效期资源类型参数可能不匹配
如果你在Azure门户生成的是容器级SAS,而代码里resource_type = "b"是针对单个blob的,这会导致权限范围不一致。要生成容器级SAS,需要把resource_type改成"c",同时确保resource参数是容器名称:resource_type = "c"如果确实是针对单个blob,那保持
"b",但resource要写成"容器名/ blob文件名"的格式。起始时间可以优化
建议把start参数提前几分钟,避免因本地时间和Azure服务器时间的微小差异导致SAS暂时无法使用:start = Sys.time() - 180 # 提前3分钟生效
修正后的示例代码:
library(AzureStor) sas_token <- get_service_sas( account = config[["storage_account_name"]], resource = "你的容器名", # 或"容器名/blob文件名" key = config[["storage_account_key"]], service = "blob", permissions = "r", resource_type = "c", # 容器级用"c",blob级用"b" protocol = "https", start = Sys.time() - 180, expiry = Sys.time() + 3600 )
内容的提问来源于stack exchange,提问作者MaskofIllusion
相关产品推荐
相关产品推荐

