问题描述
我一直在尝试将CouchDB中的JWT身份验证方法与Auth0一起使用。按照https://docs.couchdb.org/en/stable/api/server/authn.html#jwt-authentication上的文档,我在我的default.ini文件中添加了authentication_handlers,并按如下所示配置了jwt_auth和jwt_keys:
[jwt_auth]
; List of claims to validate
required_claims = alg,kid,sub
[jwt_keys]
rsa:<kid> = -----BEGIN PUBLIC KEY-----\n
<PublicKey>
\n-----END PUBLIC KEY-----\n
我从Auth0(https:// [myDomain] /.well-kNown/jwks.json)得到了孩子和公共密钥。现在,当我请求JWT令牌并将其添加到_session端点的CouchDB请求中时,我得到以下响应:
{
"ok": true,"userCtx": {
"name": null,"roles": []
},"info": {
"authentication_handlers": [
"cookie","default"
]
}
}
我觉得我在default.ini文件中做错了什么。谁能帮我吗?
解决方法
您似乎尚未在CouchDB中启用JWT身份验证。我之所以这样说,是因为:
"info": {
"authentication_handlers": [
"cookie","default"
]
}
还应包括"jwt"
。
要实现这一点,CouchDB配置中的[chttpd]
块应包括:
{chttpd_auth,jwt_authentication_handler}
此外,我认为您无需列出这三个必需的声明。就在前几天,我得到了这项工作,而Couch要求这些,因此您无需列出它们。确实,当我列出其中任何一个时,我都会收到有关“重复要求”之类的错误。
此外,请确保JWT中没有iss
(发布者)声明。这个问题可能会在将来的版本中解决,但是在撰写本文时,要使其与Couch 3.1配合使用,我必须明确确保没有iss
声明。
更多详细信息in this issue。
,所以这很尴尬,但我的问题是我没有以 PEM 格式输入公钥,所以我所要做的就是使用这个命令:
curl https://[myDomain]/pem -s | openssl x509 -pubkey -noout
获取 PEM 格式并使用它来配置 CouchDB。