MongoDB、ACL 和用户的 Restheart
Restheart for MongoDB, ACL and users
我有一个带有 atlas 示例数据库的 MongoDB 实例,我正在尝试在其上配置 Restheart。
我在 restheart 配置了 mongoRealmAuthenticator 和 MongoAclAuthorizer,在 restheart 数据库中配置了 ACL 和 USERS 集合,以及以下 mongo-mounts:
- what: /sample_weatherdata
where: /sample_weatherdata
用户集合有管理员用户和一个名为 sample_weatherdata 的用户,具有用户角色。 ACL 集合具有以下 ACL。
{
"_id" : "userCanGetOwnCollection",
"roles" : [
"user"
],
"predicate" : "method(GET) and path-template('/{userid}') and equals(@user.userid, ${userid})",
"priority" : 100,
"_etag" : ObjectId("62322951a40a5c34cad71769")
}
但是当我尝试使用 curl 从 sample_weatherdata 数据库获取信息时(curl -k -u sample_weatherdata:secret -X GET https://xxxxx:4443/sample_weatherdata ?page=1),我在 restheart 日志中收到错误消息:
21:01:22.702 [XNIO-1 task-1] DEBUG o.r.s.authorizers.FileAclAuthorizer - role user, permission (roles=[user],predicate=method(GET) and path-template('/{userid}') and equals(@user.userid, ${userid}) and qparams-contain(page) and qparams-blacklist(filter, sort)
), resolve false
21:01:22.716 [XNIO-1 task-1] DEBUG o.r.s.authorizers.MongoAclAuthorizer - role user, permission id BsonString{value='userCanGetOwnCollection'}, resolve false
21:01:22.718 [XNIO-1 task-1] INFO org.restheart.handlers.RequestLogger - GET https://xxxxxxx:4443/sample_weatherdata?page=1 from /10.100.200.100:55555 => status=403 elapsed=26ms contentLength=0 username=sample_weatherdata roles=[user]
知道我是否遗漏了什么或如何配置 ACL 以允许查询吗?
如果您使用默认身份验证器,即 mongoRealmAuthenticator
用户的正确 ID 属性 是 @user._id
所以您的许可应该是:
{
"_id" : "userCanGetOwnCollection",
"roles" : [ "user" ],
"predicate" : "method(GET) and path-template('/{userid}') and equals(@user._id, ${userid})",
"priority" : 100
}
在示例中 acl.json 你有:
NOTE: the id of the user is @user.userid with fileRealmAuthenticator and @user._id with mongoRealmAuthenticator
我是 RESTHeart 的主要提交者,鉴于现在 mongoRealmAuthenticator
是默认验证器,我刚刚更新了示例 acl.json 和相关文档以使用 @user._id
我有一个带有 atlas 示例数据库的 MongoDB 实例,我正在尝试在其上配置 Restheart。
我在 restheart 配置了 mongoRealmAuthenticator 和 MongoAclAuthorizer,在 restheart 数据库中配置了 ACL 和 USERS 集合,以及以下 mongo-mounts:
- what: /sample_weatherdata
where: /sample_weatherdata
用户集合有管理员用户和一个名为 sample_weatherdata 的用户,具有用户角色。 ACL 集合具有以下 ACL。
{
"_id" : "userCanGetOwnCollection",
"roles" : [
"user"
],
"predicate" : "method(GET) and path-template('/{userid}') and equals(@user.userid, ${userid})",
"priority" : 100,
"_etag" : ObjectId("62322951a40a5c34cad71769")
}
但是当我尝试使用 curl 从 sample_weatherdata 数据库获取信息时(curl -k -u sample_weatherdata:secret -X GET https://xxxxx:4443/sample_weatherdata ?page=1),我在 restheart 日志中收到错误消息:
21:01:22.702 [XNIO-1 task-1] DEBUG o.r.s.authorizers.FileAclAuthorizer - role user, permission (roles=[user],predicate=method(GET) and path-template('/{userid}') and equals(@user.userid, ${userid}) and qparams-contain(page) and qparams-blacklist(filter, sort) ), resolve false
21:01:22.716 [XNIO-1 task-1] DEBUG o.r.s.authorizers.MongoAclAuthorizer - role user, permission id BsonString{value='userCanGetOwnCollection'}, resolve false
21:01:22.718 [XNIO-1 task-1] INFO org.restheart.handlers.RequestLogger - GET https://xxxxxxx:4443/sample_weatherdata?page=1 from /10.100.200.100:55555 => status=403 elapsed=26ms contentLength=0 username=sample_weatherdata roles=[user]
知道我是否遗漏了什么或如何配置 ACL 以允许查询吗?
如果您使用默认身份验证器,即 mongoRealmAuthenticator
用户的正确 ID 属性 是 @user._id
所以您的许可应该是:
{
"_id" : "userCanGetOwnCollection",
"roles" : [ "user" ],
"predicate" : "method(GET) and path-template('/{userid}') and equals(@user._id, ${userid})",
"priority" : 100
}
在示例中 acl.json 你有:
NOTE: the id of the user is @user.userid with fileRealmAuthenticator and @user._id with mongoRealmAuthenticator
我是 RESTHeart 的主要提交者,鉴于现在 mongoRealmAuthenticator
是默认验证器,我刚刚更新了示例 acl.json 和相关文档以使用 @user._id