如何在Apache Sling或Jackrabbit Oak中进行用户冒充?

问题描述 投票:0回答:1

或者更具体地说,我是以 "管理员 "用户身份登录的。

假设我是以 "管理员 "用户的身份登录的 我想冒充一个用户 "testSiteUser

考虑到'testSiteUser'节点(rep:User)没有一个名为保护的String[]的属性。rep:impersonators 包含管理值的设置

如何更新受保护的财产 rep:impersonators 以便它包含admin?

一旦用户节点设置了这个,我相信设置一个cookie sling.sudo 应该允许用户冒充。pache Sling Authentication Service configuration

到目前为止,我已经尝试了什么。

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和过程是什么?

sling jackrabbit-oak
1个回答
0
投票

我理解你的问题,你想通过一个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
© www.soinside.com 2019 - 2024. All rights reserved.