You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CouchDB非对称密钥JWT认证失败求助:无效密钥错误

解决CouchDB JWT认证"Not a valid key"错误

问题现状

已完成CouchDB 3.2.2的JWT认证配置,_session接口显示JWT为有效认证方式,但携带Bearer Token请求时返回{"error":"bad_request","reason":"Not a valid key"}错误。

配置内容如下:

[chttpd]
authentication_handlers = {chttpd_auth, jwt_authentication_handler}, {chttpd_auth, cookie_authentication_handler}, {chttpd_auth, default_authentication_handler}

[jwt_auth]
required_claims = exp

[log]
level = debug

[jwt_keys]
rsa:fqT4qxoKNIwJSUSdhEL3KYRjl2tsz-tRMcZr_V16skM = -----BEGIN PUBLIC KEY-----\MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAooP42fI/5PcuI5AflBpn\nLVH9cv4Iz5ubS9J2fFigCSIq6r2nQvgyw/uD+mKO+Gy87zHw+2+2MlYNWiWgBwSJ\naGXE4eZOtqsjiy3q00JMtNfUYCpa8hZWlazIq4beUFjxaDNgTIA1Dm7yk4ZsDKG8\njIzRz51WHAQtnTVGplUYRQD8hVfEiLxB2nbtVMp8rdTTR0hlIv/b262VA1d76BwE\nEzGwgasKlfUxx5usMJ8WRiMMvsgfsrQ/UqH/Oz1BJ/jebbFA2hhQxMZTjk+Sb2hF\nGvxOb7+DNJrgCNyxQfTPThNisOurQf+W6APyP6IMEpkE/E+t4nsPlo9B0+DdjeTW\nwaDcemMzoWmuerjA4PJ7E7CpOOCq6NmjrPJVTjvb61A6zB52LtYLbwqKFVx166Wa\nClhdNspeAXDEP9m1w+TLbvsDBlnVvfJMT/MnBn3nQKGqwjaNJ0VZttn66DAS5Qig\n8iC4R0Ab8Hv22s/WKQA6txXTJ5Fj43TvGbf/kZVteB9hqIdAkoeBKlHQaNz9S4lL\nbt+w1C1CkiO272S/iun+q9il5tbTWVU3mqYEJCgzs2q9RtMTrj81MaM89QRuoJxO\nC/fOcE1mPsFs5PiIOfMcetLNR7jNiwQknK4krmBM9DGrK1tR8hU471ANAOYmqntH\nPUyoxOpC0reaacfiKOqaabkCAwEAAQ==\n-----END PUBLIC KEY-----\n

调用_session接口返回:

curl 127.0.0.1:5984/_session
{"ok":true,"userCtx":{"name":null,"roles":[]},"info":{"authentication_handlers":["jwt","cookie","default"]}}

请求失败示例:

curl -H 'Authorization: Bearer $REALLY_LONG_STRING' 127.0.0.1:5984/
{"error":"bad_request","reason":"Not a valid key"}

问题根源

配置中的PEM公钥存在格式错误:

  • 公钥开头-----BEGIN PUBLIC KEY-----\MIICIjAN...里的\M是非法转义字符
  • 公钥内容使用了\n转义字符串,而非真实换行,导致CouchDB无法正确解析公钥结构

修复步骤

1. 修正公钥格式

将公钥内容改为真实换行,删除错误的转义字符,正确配置如下:

[jwt_keys]
rsa:fqT4qxoKNIwJSUSdhEL3KYRjl2tsz-tRMcZr_V16skM = -----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAooP42fI/5PcuI5AflBpn
LVH9cv4Iz5ubS9J2fFigCSIq6r2nQvgyw/uD+mKO+Gy87zHw+2+2MlYNWiWgBwSJ
aGXE4eZOtqsjiy3q00JMtNfUYCpa8hZWlazIq4beUFjxaDNgTIA1Dm7yk4ZsDKG8
jIzRz51WHAQtnTVGplUYRQD8hVfEiLxB2nbtVMp8rdTTR0hlIv/b262VA1d76BwE
EzGwgasKlfUxx5usMJ8WRiMMvsgfsrQ/UqH/Oz1BJ/jebbFA2hhQxMZTjk+Sb2hF
GvxOb7+DNJrgCNyxQfTPThNisOurQf+W6APyP6IMEpkE/E+t4nsPlo9B0+DdjeTW
waDcemMzoWmuerjA4PJ7E7CpOOCq6NmjrPJVTjvb61A6zB52LtYLbwqKFVx166Wa
ClhdNspeAXDEP9m1w+TLbvsDBlnVvfJMT/MnBn3nQKGqwjaNJ0VZttn66DAS5Qig
8iC4R0Ab8Hv22s/WKQA6txXTJ5Fj43TvGbf/kZVteB9hqIdAkoeBKlHQaNz9S4lL
bt+w1C1CkiO272S/iun+q9il5tbTWVU3mqYEJCgzs2q9RtMTrj81MaM89QRuoJxO
C/fOcE1mPsFs5PiIOfMcetLNR7jNiwQknK4krmBM9DGrK1tR8hU471ANAOYmqntH
PUyoxOpC0reaacfiKOqaabkCAwEAAQ==
-----END PUBLIC KEY-----

2. 匹配JWT的kid字段

确保JWT头部的kid值与配置中rsa:后的密钥ID(fqT4qxoKNIwJSUSdhEL3KYRjl2tsz-tRMcZr_V16skM)完全一致,CouchDB通过kid匹配对应公钥。

3. 确认签名算法一致性

JWT必须使用RS256/RSA系列签名算法,与配置的rsa:密钥类型匹配;若使用HS256等对称算法,需改用hs:前缀配置密钥。

4. 重启CouchDB服务

修改配置后必须重启CouchDB,确保新的密钥配置生效。

5. 查看调试日志

开启debug级别日志后,检查CouchDB日志文件(默认路径var/log/couchdb/),获取更详细的密钥解析错误信息,辅助定位问题。

验证

重启服务后重新发起请求:

curl -H 'Authorization: Bearer YOUR_VALID_JWT_TOKEN' 127.0.0.1:5984/

若返回数据库列表或对应权限的内容,则认证成功。

内容的提问来源于stack exchange,提问作者SemiProfessionalStudies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:40:29