或者更具体地说,我是以 "管理员 "用户身份登录的。
假设我是以 "管理员 "用户的身份登录的 我想冒充一个用户 "testSiteUser
考虑到'testSiteUser'节点(rep:User)没有一个名为保护的String[]的属性。rep:impersonators
包含管理值的设置
如何更新受保护的财产 rep:impersonators
以便它包含admin?
一旦用户节点设置了这个,我相信设置一个cookie sling.sudo
应该允许用户冒充。
到目前为止,我已经尝试了什么。
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 公开了锁定状态。例如,锁定状态由 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和过程是什么?
我理解你的问题,你想通过一个REST-call添加一个冒充者。
正如你已经发现的那样,所有与安全相关的属性都是受保护的,所以它们只能通过REST调用来操作。所以它们只能通过API调用来操作--而不能直接写入。
但是AEM已经有很多专门的REST-API用于它自己的用户界面。为了找到它们,你应该首先在普通的AEM用户界面上执行所需的操作。然后用浏览器的网络检查器检查一下,哪个http请求是由浏览器发出的。
在你的情况下,进入经典的用户管理器 (http:/localhost:4502useradmin。).
在这里你可以找到卷曲。
curl 'http://localhost:4502/home/users/J/JfiFIrTqxwUamu2BvWj-' \
-u admin:admin \
-F_charset_=utf-8 \
-FmemberAction=sudoers \
-FmemberEntry=alex
在我为用户添加的例子中 alex2
冒名顶替者 alex
. 所以alex可以冒充alex2。
对于用户来说 alex
你需要repository-path,出于安全考虑,这个路径是加密的。但这个路径很容易通过querybuilder找到。例如下面的查询。
http://localhost:4502/bin/querybuilder.json?path=%2fhome%2fusers&property=rep%3aauthorizableId&property.value=alex2&type=rep%3aUser
或者通过querybuilder的用户界面 http:/localhost:4502libscqsearchcontentquerydebug.html。
path=/home/users
type=rep:User
property=rep:authorizableId
property.value=alex2