rest - 如何为 Azure 存储构建授权 header 获取容器属性 REST API

标签 rest azure azure-blob-storage azure-powershell

我正在尝试使用 Azure 存储 Get Container Properties REST API 。我按照“Authentication for the Azure Storage Services ”为请求构造一个授权 header 。这是我使用的 PowerShell 脚本。

$StorageAccount = "<Storage Account Name>"
$Key = "<Storage Account Key>"
$resource = "<Container Name>"

$sharedKey = [System.Convert]::FromBase64String($Key)
$date = [System.DateTime]::UtcNow.ToString("R")

$stringToSign = "GET`n`n`n`n`n`n`n`n`n`n`n`nx-ms-date:$date`nx-ms-version:2009-09-19`n/$StorageAccount/$resource`nrestype:container"

$hasher = New-Object System.Security.Cryptography.HMACSHA256
$hasher.Key = $sharedKey

$signedSignature = [System.Convert]::ToBase64String($hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($stringToSign)))

$authHeader = "SharedKey ${StorageAccount}:$signedSignature"

$headers = @{"x-ms-date"=$date
             "x-ms-version"="2009-09-19"
             "Authorization"=$authHeader}

$container = Invoke-RestMethod -method GET `
             -Uri "https://$StorageAccount.blob.core.windows.net/$resource?restype=container" `
             -Headers $headers

从上面的脚本中,我收到身份验证失败错误。授权 header 的格式不正确。

知道如何解决这个问题吗?

最佳答案

好吧,我犯了一个非常愚蠢的错误。在我的 Invoke-RestMethod 的 URI 中,$resource?restype 被 PowerShell 识别为一个变量。由于未定义,因此 URI 变为 https://$StorageAccount.blob.core.windows.net/=container。因此,认证总是失败。连接 URI 将解决该问题。

$URI = "https://$StorageAccount.blob.core.windows.net/$resource"+"?restype=container"
$container = Invoke-RestMethod -method GET -Uri $URI -Headers $headers 

关于rest - 如何为 Azure 存储构建授权 header 获取容器属性 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36464959/

相关文章:

javascript - 是否有任何 json Rest 服务允许 javascript webapp 获取当前 UTC 时间?

bash - Azure docker 注册表 - 用于检查 docker 标记是否已存在的 bash 脚本

azure - 新-AzureDeployment : The remote server returned an error: (403) Forbidden

php - "Request date header too old"将大量文件上传到 blob 存储时发生错误

c# - 如何将附加参数传递给 Blob 触发函数

javascript - 调试 Java Stream() NullPointerException 原因的最佳方法

java - android中同时调用多个rest服务链接

java - 使用 Tomcat 部署 JAX-RS 应用程序,但始终找不到所需的资源

asp.net-mvc - 如何对单独的非 Azure ASP.NET MVC Web 应用程序和 Web Api 站点使用 Azure AD 身份验证?

azure - 当 Azure 数据工厂复制事件中缺少输入 blob 时如何避免失败