如何在 _user 数据库中为 Cloudant 分配角色
How to assign ROLES in _user DB for Cloudant
如何向 Cloudant 用户数据库中的用户添加角色?(_users)
我无法使用 Google 或 Cloudant Docs 解决这个问题。
我看到有人提到 Cloudant _user 数据库,但没有找到如何使用它。
我用 nodejs 和 express 构建了一个 API。
与
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const { BasicAuthenticator } = require('ibm-cloud-sdk-core');
我能够创建 ApiKey 并使用 service.putCloudantSecurityConfiguration() 分配角色。
下面 service.getSecurity() 的结果:
cloudant: {
'apikey-01beebbe10ae46ad9e86cc16a2937939': [ '_replicator', '_writer', '_reader' ],
'apikey-3044abd26f324792a8be5809a5521400': [ '_writer', '_reader' ],
'apikey-8d98aa26f1d246f6b736f313bd45d630': [ '_writer', '_reader' ],
'apikey-231cdadcf38945e9ab48125adddc0fdb': [],
'apikey-7ec3ebdd9c5b4aa691685fae251a255d': [ '_writer', '_reader' ],
'apikey-061e3a0ae05d486583dda500ee6685f6': [ '_writer', '_reader' ],
'apikey-0324472243bd4c0da6ea6e9022e102c8': [ '_writer', '_reader' ]
}
当我查看 service.getSessionInformation();结果,我看到了:
"result": {
"userCtx": {
"roles": [],
"name": "apikey-01beebbe10ae46ad9e86cc16a2937939"
},
"ok": true,
"info": {
"authentication_handlers": [
"iam",
"cookie",
"default",
"local"
],
"authenticated": "default",
"authentication_db": "bm-cc-us-south-18/users"
}
}
角色数组为空!
我想将这些新的 apikey 凭据与 Pouchdb 一起使用,如下所示:
localDB.replicate.to(https://<apikey>:<pass>@<cloudantURL>/<dbname>
).on('complete', function () {
// yay, we're done!
}).on('error', function (err) {
// boo, something went wrong!
});
我收到错误:
message: "You are not authorized to access this db."
感谢您的帮助。
正如您所发现的,Cloudant 允许您创建 api-key/password 对来访问一个或多个数据库。您可以针对每个数据库设置每个 API 密钥的权限,就像您已经完成的那样。
GET /session
端点(您使用 service.getSessionInformation()
JavaScript 函数访问)没有 return API 密钥在 roles
数组,但不要被推迟 - 您的 API 密钥确实具有您在第一步中定义的权限,因此您应该能够 read/write/query 数据正常 API键。
请注意,此身份验证机制独立于 CouchDB 风格的 _users
数据库。
例如 PouchDB
const PouchDB = require('pouchdb')
const db = new PouchDB('test')
const username = 'apikey-somevalue'
const password = 'somepassword'
const hostname = 'myhost.cloudant.com'
const dbname = 'pouch'
const remoteDB = `https://${username}:${password}@${hostname}/${dbname}`
db.sync(remoteDB).on('complete', async function () {
console.log('done')
const docs = await db.allDocs()
console.log(docs)
}).on('error', function (err) {
console.error(err)
});
Glenn 的回答很好,对于我来说有额外的用户对象。
这是在与 Cloudant Help 来回交流了一个月之后。
我需要删除来自 "service.getSecurity({"
的响应中的额外用户对象
delete response.result.cloudant['nobody'];
delete response.result['members'];
我唯一需要的对象是“cloudant”
如何向 Cloudant 用户数据库中的用户添加角色?(_users) 我无法使用 Google 或 Cloudant Docs 解决这个问题。 我看到有人提到 Cloudant _user 数据库,但没有找到如何使用它。
我用 nodejs 和 express 构建了一个 API。 与
const { CloudantV1 } = require('@ibm-cloud/cloudant');
const { BasicAuthenticator } = require('ibm-cloud-sdk-core');
我能够创建 ApiKey 并使用 service.putCloudantSecurityConfiguration() 分配角色。
下面 service.getSecurity() 的结果:
cloudant: {
'apikey-01beebbe10ae46ad9e86cc16a2937939': [ '_replicator', '_writer', '_reader' ],
'apikey-3044abd26f324792a8be5809a5521400': [ '_writer', '_reader' ],
'apikey-8d98aa26f1d246f6b736f313bd45d630': [ '_writer', '_reader' ],
'apikey-231cdadcf38945e9ab48125adddc0fdb': [],
'apikey-7ec3ebdd9c5b4aa691685fae251a255d': [ '_writer', '_reader' ],
'apikey-061e3a0ae05d486583dda500ee6685f6': [ '_writer', '_reader' ],
'apikey-0324472243bd4c0da6ea6e9022e102c8': [ '_writer', '_reader' ]
}
当我查看 service.getSessionInformation();结果,我看到了:
"result": {
"userCtx": {
"roles": [],
"name": "apikey-01beebbe10ae46ad9e86cc16a2937939"
},
"ok": true,
"info": {
"authentication_handlers": [
"iam",
"cookie",
"default",
"local"
],
"authenticated": "default",
"authentication_db": "bm-cc-us-south-18/users"
}
}
角色数组为空!
我想将这些新的 apikey 凭据与 Pouchdb 一起使用,如下所示:
localDB.replicate.to(https://<apikey>:<pass>@<cloudantURL>/<dbname>
).on('complete', function () {
// yay, we're done!
}).on('error', function (err) {
// boo, something went wrong!
});
我收到错误:
message: "You are not authorized to access this db."
感谢您的帮助。
正如您所发现的,Cloudant 允许您创建 api-key/password 对来访问一个或多个数据库。您可以针对每个数据库设置每个 API 密钥的权限,就像您已经完成的那样。
GET /session
端点(您使用 service.getSessionInformation()
JavaScript 函数访问)没有 return API 密钥在 roles
数组,但不要被推迟 - 您的 API 密钥确实具有您在第一步中定义的权限,因此您应该能够 read/write/query 数据正常 API键。
请注意,此身份验证机制独立于 CouchDB 风格的 _users
数据库。
例如 PouchDB
const PouchDB = require('pouchdb')
const db = new PouchDB('test')
const username = 'apikey-somevalue'
const password = 'somepassword'
const hostname = 'myhost.cloudant.com'
const dbname = 'pouch'
const remoteDB = `https://${username}:${password}@${hostname}/${dbname}`
db.sync(remoteDB).on('complete', async function () {
console.log('done')
const docs = await db.allDocs()
console.log(docs)
}).on('error', function (err) {
console.error(err)
});
Glenn 的回答很好,对于我来说有额外的用户对象。 这是在与 Cloudant Help 来回交流了一个月之后。 我需要删除来自 "service.getSecurity({"
的响应中的额外用户对象delete response.result.cloudant['nobody'];
delete response.result['members'];
我唯一需要的对象是“cloudant”