在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哈希信息并在报头中使用它,但我的物联网设备无法生成它。
1条答案
按热度按时间7ivaypg91#
很遗憾,您无法在授权标头中传递SAS令牌。它必须是您的请求URL的一部分。
但是,您可以做一些事情来缩短请求URL的长度。
ss=btqf&srt=sco
。相反,您将获得sr=q
。st
),因为它是可选的。如果SAS令牌中不包括SAS开始日期,则SAS令牌将立即生效。read
权限(sp=r
)。