为什么在提供用户名和密码的情况下 Invoke-WebRequest 无法通过 CouchDB 进行身份验证?

问题描述 投票:0回答:1

我正在通过 docker 在

localhost:5984/
托管 couchdb 的本地实例。 使用 python requests 客户端,我可以通过 API 进行管理更改,如下所示:

>>> requests.put('http://admin:password@localhost:5984/testdb').json()
{'ok': True}

但是,当尝试使用 Windows HTTP 客户端时,couchdb 说我不是管理员用户。我将此解释为身份验证失败。

> Invoke-WebRequest -Method PUT http://admin:password@localhost:5984/testdb
Invoke-WebRequest : {"error":"unauthorized","reason":"You are not a server admin."}
At line:1 char:1
+ Invoke-WebRequest -Method PUT http://admin:password@localhost:5984/te ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Invoke-WebRequest
是否具有某种阻止在 URL 方案中嵌入凭据的行为?

couchdb invoke-webrequest
1个回答
0
投票

Invoke-WebRequest
不支持在 URL 中插入用户名和密码。相反,您有两个选择:

  1. 使用
    Get-Credential
    构建用户名/密码凭证,然后使用
    Invoke-WebRequest
    参数将其传递给
    -Credential
    。例如:
$cred = Get-Credential "admin" # this will prompt you for the password
Invoke-WebRequest -Credential $cred -Method PUT http://localhost:5984/testdb
  1. 对“用户名:密码”字符串进行 Base64 编码,并使用
    -Headers
    参数将其作为基本身份验证标头传递。例如:
$auth = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("admin:password"))
Invoke-WebRequest -Headers @{Authorization = "Basic " + $auth} -Method PUT http://localhost:5984/testdb
© www.soinside.com 2019 - 2024. All rights reserved.