具有Auth0的CouchDB

具有Auth0的CouchDB,couchdb,ionic2,auth0,Couchdb,Ionic2,Auth0,可以将Auth0与CouchDB或Cloudant一起使用吗?如果是的话,有人知道教程、代码示例或github项目的例子吗 这个问题已经在Auth0论坛上提出(不是我提出的),但没有得到回应: 在我的特殊情况下,我想将带有Auth0的Ionic 2应用程序连接到没有中间层(API)的CouchDB实例 任何帮助都将不胜感激 用户是否会在couchdb中拥有自己的数据库? 因为如果没有服务器端中间件,您将无法仅限制对用户数据的访问。 如果是这样的话,你可以考虑使用OAuth. 我对Auth0并不深

可以将Auth0与CouchDB或Cloudant一起使用吗?如果是的话,有人知道教程、代码示例或github项目的例子吗

这个问题已经在Auth0论坛上提出(不是我提出的),但没有得到回应:

在我的特殊情况下,我想将带有Auth0的Ionic 2应用程序连接到没有中间层(API)的CouchDB实例


任何帮助都将不胜感激

用户是否会在couchdb中拥有自己的数据库? 因为如果没有服务器端中间件,您将无法仅限制对用户数据的访问。 如果是这样的话,你可以考虑使用OAuth. 我对Auth0并不深入,但它似乎支持它 正如CouchDB一样

有一个插件,它允许用户通过JWT令牌进行身份验证,因此允许这种情况。甚至还有一个关于如何将它与PockDB和Auth0一起使用的问题,所以我想这可能对您有帮助


我正在使用同一个插件来验证用户,它工作得非常完美。实际上,我维护了一个允许使用非对称密钥(RS256)进行JWT签名验证的插件。是的,一旦我有足够的信心,就会有一个pull请求。

试试这个插件:这个插件允许用户通过JWT令牌进行身份验证。

CouchDB 3.1支持JWT auth开箱即用

这个

基本上,更新配置的
[chttpd]
部分以包括下面的JWT部分。您可以删除默认和/或cookie,但保留它们非常有用:

[chttpd]
authentication_handlers = {chttpd_auth, cookie_authentication_handler}, {chttpd_auth, jwt_authentication_handler}, {chttpd_auth, default_authentication_handler}
然后添加此部分,在文档中没有示例:

[jwt_auth]
; List of claims to validate
; As of couch 3.1, can NOT require issuer:
; required_claims = {iss, "http://issuer"} <-- does not work
; I left it blank and it's fine
required_claims =
这是“你好”,base64编码

要为此获取JWT,请执行以下操作:

// once off...
const secret = 'hello'

// then, in an express-jwt handler somewhere...
const token = sign(data, secret, { subject: user.name, audience, algorithm, keyid: 'demo' });
return res.send({ error: null, token })

我发现主题(
sub
)、观众(
aud
)、算法(
alg
)和keyid(
kid
)都必须包含在JWT声明中,否则CouchDB不会接受认证。

谢谢您的回复。我希望每个用户都有一个自己的数据库,因为在客户端我想使用PockDB。谢谢您的回复。这个项目对我来说似乎很有趣。是否可以将coach_jwt_auth插件与Cloudant一起使用?对不起,我没有使用Cloudant的经验。我不确定它是否提供与couchdb相同的插件API,或者是否可以在cloudant实例上安装插件。我会接受你的回答。让它在Cloudant上运行是另一个主题!刚意识到我一开始就打开了一个WIP请求。我正在尝试将其合并,如果您对非对称密钥感兴趣,请随意查看:为什么不使用_usersdb?这似乎是使用coach的主要好处。为什么不使用coach用户数据库呢?
// once off...
const secret = 'hello'

// then, in an express-jwt handler somewhere...
const token = sign(data, secret, { subject: user.name, audience, algorithm, keyid: 'demo' });
return res.send({ error: null, token })