使用Azure REST API指定SAS令牌授权标头

1l5u6lss  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(170)

在SO上有大量的帖子是关于在使用SAS令牌作为URI的一部分时如何不需要Authorization头的。这些帖子是正确的,下面的代码可以工作:

Dim oRequest
    Dim sURL
    Dim SASToken
    SASToken = "sv=2021-10-04&ss=btqf&srt=sco&st=2023-01-10T14%3A23%3A49Z&se=2024-01-10T14%3A23%3A00Z&sp=rwdxftlacup&sig=MySigButNotNotMyRealSig%3D"
    sURL = "https://myaccount.queue.core.windows.net/myqueue/messages?peekonly=true&numofmessages=32&" & SASToken

    Set oRequest = CreateObject("MSXML2.XMLHTTP.6.0")
    oRequest.Open "GET", sURL
    oRequest.setRequestHeader "x-ms-date", getUTC
    oRequest.Send
    Wscript.Echo oRequest.Status, oRequest.statusText

Output:
    200          OK

但是,我的物联网设备将URL长度限制为288个字符。我使用SAS令牌创建的URI最短为320个字符。除了公开我的blob,我认为唯一的选择是实际使用授权头,但仅仅将SAS令牌放在授权头中是行不通的。

Dim oRequest
    Dim sURL
    Dim SASToken
    SASToken = "sv=2021-10-04&ss=btqf&srt=sco&st=2023-01-10T14%3A23%3A49Z&se=2024-01-10T14%3A23%3A00Z&sp=rwdxftlacup&sig=MySigButNotNotMyRealSig%3D"
    sURL = "https://myaccount.queue.core.windows.net/myqueue/messages?peekonly=true&numofmessages=32&" & SASToken

    Set oRequest = CreateObject("MSXML2.XMLHTTP.6.0")
    oRequest.Open "GET", sURL
    oRequest.setRequestHeader "x-ms-date", getUTC
    oRequest.setRequestHeader "Authorization", "SharedAccessSignature " & SASToken
    oRequest.Send
    Wscript.Echo oRequest.Status, oRequest.statusText

Output:
     400      Authentication information is not given in the correct format. 
              Check the value of Authorization header.

我见过一些代码生成SHA256哈希信息并在报头中使用它,但我的物联网设备无法生成它。

7ivaypg9

7ivaypg91#

很遗憾,您无法在授权标头中传递SAS令牌。它必须是您的请求URL的一部分。
但是,您可以做一些事情来缩短请求URL的长度。

  • 对队列使用服务SAS而不是帐户SAS。这将从SAS令牌中删除ss=btqf&srt=sco。相反,您将获得sr=q
  • 查看是否可以忽略SAS开始日期(st),因为它是可选的。如果SAS令牌中不包括SAS开始日期,则SAS令牌将立即生效。
  • 仅使用您需要的权限。目前您的SAS令牌拥有所有权限。通过将权限限制为仅所需的权限,您可以进一步缩短请求URL长度。由于您只是查看邮件,因此您所需要的只是read权限(sp=r)。
  • 查看是否可以在访问策略中移动与SAS令牌相关的参数。这样您的SAS令牌将只有签名版本、访问策略和签名参数。

相关问题