繁体   English   中英

如何修复PUT Invoke-RestMethod中的“ 401未经授权”错误(尝试替换存储过程)

[英]How to fix “401 Unauthorized” error in PUT Invoke-RestMethod (trying to replace stored procedure)

我正在尝试使用REST API和PowerShell管理CosmosDB资源。 当我使用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"

生成auth标头,就像使用POST一样(仅动词有所不同):

...
$authHeader = Generate-MasterKeyAuthorizationSignature -verb $Verb -resourceLink $ResourceLink -resourceType $ResourceType -key $MasterKey -keyType "master" -tokenVersion "1.0" -dateTime $dateTime
...

以及带有新URI(现在包括要更改的SP名称)的invoke 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

这是抛出401 Unauthorized ,因此auth标头似乎不正确。 无法弄清楚我应该在那里做些什么。

从这里看起来资源或您要更改的资源中的值不支持PUT操作。 您可以手动确认;

https://docs.microsoft.com/zh-cn/rest/api/cosmos-db/

或去

https://resources.azure.com/

所以关键是要这样改变变量:

$ResourceType = "sprocs"
$ItemName = "SP_Name"
$ResourceLink = "dbs/$DBName/colls/$CollName/$ResourceType/$ItemName"

然后生成身份验证标头。 即资源链接变量必须包含替换对象的完整路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM