Я пытаюсь управлять ресурсами CosmosDB с помощью REST API и PowerShell.
Мой код работает нормально, когда я использую GET и POST, но когда я пытаюсь заменить существующий объект, используя PUT, я получаю ошибку 401.
Мой код регистрирует хранимую процедуру, когда она не существует, и должен обновлять ее, когда SP уже существует.
Поэтому, когда я создаю новый SP, я использую следующие переменные:
$Verb = "POST"
$ResourceType = "sprocs"
$ResourceLink = "dbs/$DBName/colls/$CollName"
$queryUri = "$CosmosDBEndPoint$ResourceLink/$ResourceType"
получить заголовок авторизации:
...
$authHeader = Generate-MasterKeyAuthorizationSignature -verb $Verb -resourceLink $ResourceLink -resourceType $ResourceType -key $MasterKey -keyType "master" -tokenVersion "1.0" -dateTime $dateTime
и затем вызов метода REST:
$header = @{authorization=$authHeader;"x-ms-version"="2017-02-22";"x-ms-date"=$dateTime}
$contentType= "application/json"
Invoke-RestMethod -Method $Verb -ContentType $contentType -Uri $queryUri -Headers $header -Body $body
Он прекрасно работает и создает то, что должен.
И когда мне нужно заменить существующий объект (SP в моем случае), я изменяю переменные следующим образом:
$Verb = "PUT"
$ResourceType = "sprocs"
$ResourceLink = "dbs/$DBName/colls/$CollName"
$ItemName = "SP_Name"
$queryUri = "$CosmosDBEndPoint$ResourceLink/$ResourceType/$ItemName"
генерировать заголовок аутентификации, как в случае с POST (отличается только глагол):
...
$authHeader = Generate-MasterKeyAuthorizationSignature -verb $Verb -resourceLink $ResourceLink -resourceType $ResourceType -key $MasterKey -keyType "master" -tokenVersion "1.0" -dateTime $dateTime
...
и метод invoke REST с новым URI (который теперь включает имя SP, которое будет изменено):
$header = @{authorization=$authHeader;"x-ms-version"="2017-02-22";"x-ms-date"=$dateTime}
$contentType= "application/json"
Invoke-RestMethod -Method $Verb -ContentType $contentType -Uri $queryUri -Headers $header -Body $body
Что бросает меня 401 Unauthorized
, поэтому кажется, что заголовок аутентификации неверен. Не могу понять, что я должен изменить там.