Я пытаюсь реализовать функцию заголовка полномочий SharedKeyLite в powershell. Это соединение с API REST API Azure. Мне не хватает чего-то, потому что я все время получаю сообщение об ошибке:
Не удалось выполнить аутентификацию сервера запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.
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
}
UPDATE: Здесь код, который вызывает эту функцию. Переменная $action устанавливается в строку URI.
$uriString = "https://$StorageAccountName.table.core.windows.net/Tables"
$headers = GenerateHeader $StorageAccountName $StorageAccountKey "Tables"
Invoke-RestMethod -Uri $uriString -Method $method -Headers $headers -Body $body
И вот ошибка, которую она выдает.
Invoke-RestMethod: AuthenticationFailedServer не удалось аутентифицировать запрос. Убедиться значение заголовка авторизации формируется правильно, включая подпись. RequestID: 4215377d-0002-0044-1a92-94cd56000000 Время: 2015-05-22T13: 21: 53.5205261Z. C:\Users\Samuel\Source\BaseDataInstall\BaseDataInstall\AzureHelpers.ps1: 45 char: 2 + Invoke-RestMethod -Uri $uriString -Method $method -Headers $headers -Body $body + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest: HttpWebRequest) [Invoke-RestMethod], WebExc eption + FullyQualifiedErrorId: WebCmdletWebResponseException, Microsoft.PowerShell.Commands.InvokeRestMethodCommand
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=