1. 内置认证机制
- Basic Auth:
- 原理:这是一种简单的用户名和密码认证方式。客户端将用户名和密码进行Base64编码后,放在HTTP请求头的
Authorization
字段中发送给服务器。
- 配置:在CouchDB的
local.ini
配置文件中,确保[httpd]
部分的WWW-Authenticate
字段设置正确,一般格式为WWW-Authenticate = Basic realm="CouchDB"
。
- Cookies Auth:
- 原理:用户登录成功后,服务器会返回一个包含认证信息的Cookie。后续客户端请求带上该Cookie,服务器通过验证Cookie来确认用户身份。
- 配置:同样在
local.ini
文件中,[httpd]
部分,enable_cors
设置为true
时,需要合理配置cors_credentials
等相关CORS(跨域资源共享)参数以支持Cookie认证。
2. 实现用户认证基本步骤
- 创建用户:
- 可以使用CouchDB的
/_users
系统数据库。向/_users/org.couchdb.user:{username}
文档中插入用户信息,包括name
(用户名)、password
(建议使用加密后的密码)、roles
(用户角色,如admin
、editor
等)。例如,使用HTTP请求:
curl -X PUT http://localhost:5984/_users/org.couchdb.user:testuser \
-H 'Content-Type: application/json' \
-d '{
"type": "user",
"name": "testuser",
"password": "testpassword",
"roles": []
}'
- 配置认证策略:
- 编辑
local.ini
文件,在[httpd]
部分设置require_valid_user = true
,这样所有对数据库的请求都需要经过认证。
- 对于特定数据库,可以在数据库的
_security
文档中设置访问权限。例如,允许特定角色的用户读写数据库:
{
"admins": {
"names": [],
"roles": ["admin"]
},
"members": {
"names": [],
"roles": ["editor"]
}
}
- 用户登录:
- 客户端发起登录请求,如使用Basic Auth,请求头类似:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
(其中dXNlcm5hbWU6cGFzc3dvcmQ=
是username:password
的Base64编码)。
- 服务器验证用户名和密码,如果正确,返回认证成功信息(如Cookie),否则返回错误信息。
3. 其他常用方法
- 使用外部认证服务:
- 原理:CouchDB可以与外部认证服务(如LDAP、OAuth等)集成。通过配置将认证请求转发给外部服务,由外部服务验证用户身份。
- 配置:以LDAP为例,在
local.ini
文件中,配置[auth_ldap]
部分,设置uri
(LDAP服务器地址)、bind_dn
(绑定的DN)、bind_password
(绑定密码)等参数。例如:
[auth_ldap]
uri = ldap://ldap.example.com
bind_dn = cn=admin,dc=example,dc=com
bind_password = adminpassword
- Token - based认证:
- 原理:用户登录成功后,服务器生成一个Token(如JWT - JSON Web Token),包含用户身份和权限信息。客户端在后续请求中携带该Token,服务器验证Token的有效性。
- 配置:需要借助第三方库或自定义代码实现。在CouchDB前端代理(如Nginx)或中间件中添加Token验证逻辑,验证通过后才将请求转发给CouchDB。