0

或者更具体地说:

鉴于我以“管理员”用户身份登录,并且我想冒充用户“testSiteUser”

鉴于“testSiteUser”节点 (rep:User) 没有一个名为rep:impersonatorsset 的受保护 String[] 属性,其值包含 admin

如何更新受保护的属性rep:impersonators以使其包含管理员?

一旦用户节点设置了这个,我相信设置 cookiesling.sudo应该允许用户模拟。 补丁 Sling 身份验证服务配置

到目前为止我所尝试的..

curl -F:name=testSiteUser -Fpwd=testSiteUser 
    -FpwdConfirm=exampleSiteUser 
    -F'rep:impersonators'=admin 
    -F'rep:impersonators'@TypeHint='String[]' 
    -u admin:admin 
    http://localhost:8080/system/userManager/user.create.html

回复 500

javax.jcr.nodetype.ConstraintViolationException:尝试设置受保护的属性 rep:impersonators

根据JCR 规范

16.3.12 与受保护属性的交互 JCR 的许多功能将存储库元数据公开为由 mixin 节点类型定义的受保护属性。例如,锁定状态由 mix:lockable 定义的属性 jcr:lockOwner 和 jcr:lockIsDeep 公开。对受保护属性的更改只能通过特定于功能的 API(例如 Node.lock)间接进行,而不是通过像 Node.setProperty 这样的通用写入方法。此类更改不受 jcr:modifyProperties 权限的约束,而是受特定功能特定权限的约束,例如 jcr:lockManagement(请参阅第 16.2.3 节标准权限)。

也许唯一的方法是编写我自己的 Java 代码,如下所示,但我很确定应该有一个 REST API 来做到这一点......

Authorizable authorizable = userManager.getAuthorizable(user.getId()); 
Principal admin = userManager.getAuthorizable("admin").getPrincipal();
jackrabbitUser = (User) authorizable;
Impersonation impersonation =jackrabbitUser.getImpersonation();
impersonation.grantImpersonation(admin);

基本上 rep:impersonators 是一个只读属性,“通过特定功能的 API 间接”进行管理 使用 Apache Sling 或 Jackrabbit Oak 进行用户模拟的 API 和程序是什么?

4

1 回答 1

0

我理解你的问题,你想通过 REST 调用添加一个模仿者。

正如您已经发现的那样,所有与安全相关的属性都受到保护。因此它们只能通过 API 调用进行操作——而不是直接写入。

但是 AEM 已经为自己的用户界面提供了很多专门的 REST-API。要找到它们,您应该首先在普通 AEM UI 上执行所需的操作。然后使用浏览器网络检查器检查浏览器发出的 http 请求。

在您的情况下,请转到经典用户管理器(http://localhost:4502/useradmin)。

在那里你可以找到卷曲:

curl 'http://localhost:4502/home/users/J/JfiFIrTqxwUamu2BvWj-' \
     -u admin:admin \
     -F_charset_=utf-8 \
     -FmemberAction=sudoers \
     -FmemberEntry=alex

在示例中,我为用户添加alex2了 impersonator alex。所以 alex 可以冒充 alex2。


对于用户alex,您需要存储库路径,同时出于安全原因对其进行加密。但是使用查询构建器很容易找到这条路径。例如以下查询:

http://localhost:4502/bin/querybuilder.json?path=%2fhome%2fusers&property=rep%3aauthorizableId&property.value=alex2&type=rep%3aUser

或通过 querybuilder UI http://localhost:4502/libs/cq/search/content/querydebug.html

path=/home/users
type=rep:User
property=rep:authorizableId
property.value=alex2
于 2020-05-22T19:25:09.440 回答