刚刚在 windows 机器上安装了 couchdb 3.00 版本并配置为单节点。
在安装中定义管理员,即使在安装之后也是如此。定义后重新启动了 couchDB。
但是当我尝试通过 shell 脚本创建数据库时,它会响应:
我绝对确定我的密码是正确的。
我想知道我是否犯了错误或错误。
刚刚在 windows 机器上安装了 couchdb 3.00 版本并配置为单节点。
在安装中定义管理员,即使在安装之后也是如此。定义后重新启动了 couchDB。
但是当我尝试通过 shell 脚本创建数据库时,它会响应:
我绝对确定我的密码是正确的。
我想知道我是否犯了错误或错误。
在 Couchdb 3 启动时,强制使用身份验证进行 PUT 或 DELETE 操作。为此目的,Invoke-WebRequest 具有 -Authorization 参数。但身份验证采用明确的格式。我使用 PSCouchDB ( https://pscouchdb.readthedocs.io/en/latest/auth.html ) 在 SecureString 密码对象中使用身份验证。
例如:
$password = "password" | ConvertTo-SecureString -AsPlainText -Force
Set-CouchDBSession -UserId admin -Password $password
Set-CouchDBSession -UserId admin # prompt password
New-CouchDBDatabase -Database test
该问题与 CouchDB 无关,而是与 Invoke-WebRequest 允许的身份验证方法有关。
虽然我找不到任何明确声明不支持 URL 凭据的文档,但我确实在 PowerShell 文档1中找到了受支持的身份验证方法列表:
-验证
指定用于请求的显式身份验证类型。默认值为无。身份验证不能与 UseDefaultCredentials 一起使用。
可用的身份验证选项:
None:这是未提供身份验证时的默认选项;不使用显式身份验证。
基本:需要凭据。凭据以 base64(用户:密码)格式在 RFC 7617 基本身份验证标头中发送。
Bearer:需要令牌。使用提供的令牌发送 RFC 6750 Authorization: Bearer 标头。这是 OAuth 的别名
OAuth:需要令牌。使用提供的令牌发送 RFC 6750 Authorization: Bearer 标头。这是 Bearer 的别名
我将上述解释为不支持您使用的身份验证方法。
这是一个使用基本身份验证的示例,它肯定是执行任务的数百种方法之一。
# setup variables to form a HTTP Basic Authorization
$uid = "<username>"
$pwd = "<password>"
# Convert the Basic credentials to bytes
$atob = [System.Text.Encoding]::UTF8.GetBytes($uid +":" + $pwd)
# To Base64 encoding
$auth = "Basic " + [System.Convert]::ToBase64String($atob)
# Create the database
Invoke-WebRequest -Method PUT -Url http://127.0.0.1:5964/abc -Headers @{"Authorization"=$auth}
FWIW,cURL 允许简化内联 URL http 身份验证,但这可能不是一个选项。
上面的代码借鉴了这个关于基本身份验证的 SO Q/A答案。