当前位置: 首页 > 知识库问答 >
问题:

Powershell中的Azure API SharedKeyLite

裘兴思
2023-03-14

我试图在PowerShell中实现一个SharedKeyLite授权头函数。这是为了连接到Azure Tables REST API。我错过了一些东西,因为我总是出错:

   function GenerateHeader($accountName, $accountKey, $action)
{
    $xmsdate = get-date
    $xmsdate = $xmsdate.ToUniversalTime()
    $xmsdate = $xmsdate.toString('r')
    $newLine = "`n";
    $message = $xmsdate + $newline + "/" + $accountname + "/" + $action;
    $hmacsha = New-Object System.Security.Cryptography.HMACSHA256
    $hmacsha.key = [Convert]::FromBase64String($accesskey)
    $signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($message))
    $signature = [Convert]::ToBase64String($signature)
    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("x-ms-version", "2014-02-14")
    $headers.Add("x-ms-date", $xmsdate)
    $headers.Add("Authorization", "SharedKeyLite " + $accountName + ":" + $signature)

    return $headers
}
$uriString = "https://$StorageAccountName.table.core.windows.net/Tables"

$headers = GenerateHeader $StorageAccountName $StorageAccountKey "Tables"

Invoke-RestMethod -Uri $uriString -Method $method -Headers $headers -Body $body

Edit:下面是函数外部$Headers变量的输出示例...

Key   : x-ms-version
Value : 2014-02-14

Key   : x-ms-date
Value : Tue, 26 May 2015 19:30:20 GMT

Key   : Authorization
Value : SharedKeyLite <MyStorageName>:lf+ndqhi4OeJhIfLljugT0dfcLbqXDBHwrQJn9Q66HQ=

共有1个答案

虞安康
2023-03-14

所以这最终是一个简单的编码错误:(

我觉得现在发布这个有点傻,但我要发布一个答案,因为我在任何地方都找不到适合Azure的Powershell授权构建器。这个确实适用于Azure Tables...

function GenerateHeader($accountName, $accountKey, $action)
{
    $xmsdate = get-date
    $xmsdate = $xmsdate.ToUniversalTime()
    $xmsdate = $xmsdate.toString('R')
    $newLine = "`n";
    $action = $action.ToLower()
    $message = $xmsdate + $newline + "/" + $accountname + "/" + $action;
    $hmacsha = New-Object System.Security.Cryptography.HMACSHA256
    $hmacsha.key = [Convert]::FromBase64String($accountKey)
    $signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($message))
    $signature = [Convert]::ToBase64String($signature)
    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Content-Type", "application/json")
    $headers.Add("x-ms-date", $xmsdate)
    $headers.Add("Authorization", "SharedKeyLite " + $accountName + ":" + $signature)

    return $headers
}
 类似资料:
  • 本文向大家介绍Windows 8 中的 PowerShell 3.0,包括了Windows 8 中的 PowerShell 3.0的使用技巧和注意事项,需要的朋友参考一下 Windows 8 惊艳登场,当Metro界面吸引了无数人的眼球时,其实还有很多特性值得关注,如PowerShell 3.0、Hyper-V 3.0、vhdx、IIS 8等。 PowerShell 2.0实践系列从本次开始全面转

  • powershell中是否有空合并运算符? 我希望能够在powershell中执行以下c#命令:

  • PowerShell 是一个跨平台的 (Windows, Linux 和 OS X) 自动化和配置工具(框架),可以和已有的工具友好集成,特别优化用于处理结构化数据 (如 JSON, CSV, XML 等), REST APIs 以及对象模型。它包含一个命令行 Shell、一个关联的脚本语言以及一个用于处理 cmdlets 的框架。 PowerShell 就相当于 Linux 下的 Bash 以及

  • 本文向大家介绍PowerShell中的别名是什么?,包括了PowerShell中的别名是什么?的使用技巧和注意事项,需要的朋友参考一下 通常,别名是指命令其他名称。在系统管理员的生活中,他们需要简短而又熟悉的命令。PowerShell的动词名词cmdlet非常系统化,但在日常生活中不实用。因此,系统管理员使用PowerShell别名。  例如,-Dir或ls表示Get-ChildItem, cat

  • 据我所知,PowerShell似乎没有一个针对所谓三元运算符的内置表达式。 例如,在支持三元运算符的C语言中,我可以编写如下内容: 如果PowerShell中并不存在这种情况,那么实现相同结果的最佳方法(即易于阅读和维护)是什么呢?

  • 今天刚刚学习了正则表达式的基础知识,并通过一些努力,设法拼凑出一些几乎有效的东西。 我有一本书中的文档,我需要在子弹里找到文章,而不是散文。 子弹样本: Lorem ipsum Lorem(XXX)Lorem Lorem the ipsum Lorem ipsum,Lorem,and 散文示例:(右)lorem写了ipsum。Lorem ipsum动词ipsum。 到目前为止,这或多或少地起到了作