Invoke-RestMethod 返回 401 - 在 Powershell 7 中未经授权
Invoke-RestMethod returning 401 - Unauthorized in Powershell 7
我 运行 遇到了一个问题,试图在 PowerShell 7 中使用 Invoke-RestMethod 命令。我可以在 PowerShell 5.1 中将它设置为 运行,但 7 给了我401 - 未经授权的消息。
这是 PowerShell 5.1 的命令:
Invoke-RestMethod "http://internalServer/api/job?name=testJob" -Method GET -UseDefaultCredentials -ContentType "application/JSON"
这是 PowerShell 7 的命令:
Invoke-RestMethod "http://internalServer/api/job?name=testJob" -Method GET -UseDefaultCredentials -ContentType "application/JSON" -AllowUnencryptedAuthentication
api 托管在使用 Windows 身份验证的内部服务器上。当我通过 Fiddler 跟踪请求时,这两个命令似乎都获得了 401 响应,但 PowerShell 5.1 使用响应生成授权:协商 YII{token} header 而 PowerShell 7 停止并 returns 一个错误.以前有其他人遇到过这个吗?
如评论中所示,此处正在进行重定向。默认情况下,身份验证不会在重定向后继续存在,但您可以使用 -PreserveAuthorizationOnRedirect
参数控制 Invoke-RestMethod
:
$irmParams = @{
Uri = "http://internalServer/api/job?name=testJob"
Method = 'GET'
UseDefaultCredentials = $true
ContentType = 'application/json'
PreserveAuthorizationOnRedirect = $true # <== Should be your solution
AllowUnencryptedAuthentication = $true # <=== You should not be using this :)
}
Invoke-RestMethod @irmParams
Thanks to some additional legwork by OP, -PreserveAuthorizationOnRedirect
:
Will only keep the authentication headers for requests made to a Uri
that includes the original Uri
up to the last /
. What the documentation doesn't include is that the subsequent Uri
's must also match the case of the original Uri
.
在 OP 的案例中,重定向改变了原始 Uri
的大小写,因此即使他们指定 -PreserveAuthorizationOnRedirect
.
也会破坏重定向的身份验证
我 运行 遇到了一个问题,试图在 PowerShell 7 中使用 Invoke-RestMethod 命令。我可以在 PowerShell 5.1 中将它设置为 运行,但 7 给了我401 - 未经授权的消息。
这是 PowerShell 5.1 的命令:
Invoke-RestMethod "http://internalServer/api/job?name=testJob" -Method GET -UseDefaultCredentials -ContentType "application/JSON"
这是 PowerShell 7 的命令:
Invoke-RestMethod "http://internalServer/api/job?name=testJob" -Method GET -UseDefaultCredentials -ContentType "application/JSON" -AllowUnencryptedAuthentication
api 托管在使用 Windows 身份验证的内部服务器上。当我通过 Fiddler 跟踪请求时,这两个命令似乎都获得了 401 响应,但 PowerShell 5.1 使用响应生成授权:协商 YII{token} header 而 PowerShell 7 停止并 returns 一个错误.以前有其他人遇到过这个吗?
如评论中所示,此处正在进行重定向。默认情况下,身份验证不会在重定向后继续存在,但您可以使用 -PreserveAuthorizationOnRedirect
参数控制 Invoke-RestMethod
:
$irmParams = @{
Uri = "http://internalServer/api/job?name=testJob"
Method = 'GET'
UseDefaultCredentials = $true
ContentType = 'application/json'
PreserveAuthorizationOnRedirect = $true # <== Should be your solution
AllowUnencryptedAuthentication = $true # <=== You should not be using this :)
}
Invoke-RestMethod @irmParams
Thanks to some additional legwork by OP, -PreserveAuthorizationOnRedirect
:
Will only keep the authentication headers for requests made to a
Uri
that includes the originalUri
up to the last/
. What the documentation doesn't include is that the subsequentUri
's must also match the case of the originalUri
.
在 OP 的案例中,重定向改变了原始 Uri
的大小写,因此即使他们指定 -PreserveAuthorizationOnRedirect
.