【问题标题】:openam rest api json/users/?_fields=ismemberof attribute does not show updated resultopenam rest api json/users/?_fields=ismemberof 属性不显示更新结果
【发布时间】:2015-02-12 11:38:59
【问题描述】:

使用 openam 12.0.0.0 发现 openam 存在一个问题,使用 api 检索当前登录的组信息

      "/json/users/username/?_fields=ismemberof"

场景:

我曾尝试通过从 openam 控制台添加用户属性“ismemberof”来使用此 api。

在我使用 restapi "/json/users/username/?_fields=ismemberof" 检索当前登录用户的组信息之后

返回给我这个:

curl --header"iPlanetDirectoryPro:AQIC5wM2LY4SfczExeheltxgjSN7wrCR5XhfEGF5kj6t6C4.*AAJTSQACMDEAAlNLABQtMzQ0NzM3MDc3MzE1MjMwNjEwOQ..*" http://openam.server:8080/openam/json/users/indrani?_fields=ismemberof

输出:

   {"ismemberof":["cn=grp1,ou=groups,o=openam","cn=grp2,ou=groups,o=openam"]}

一段时间后,我从 grp1 中删除了我的用户并从 openam 控制台保存 即,现在当前用户只有一个组,即 grp2

再次使用 curl 命令获取当前用户的组列表:

 curl --header"iPlanetDirectoryPro:AQIC5wM2LY4SfczExeheltxgjSN7wrCR5XhfEGF5kj6t6C4.*AAJTSQACMDEAAlNLABQtMzQ0NzM3MDc3MzE1MjMwNjEwOQ..*" http://openam.server:8080/openam/json/users/indrani?_fields=ismemberof

输出:

{"ismemberof":["cn=grp1,ou=groups,o=openam","cn=grp2,ou=groups,o=openam"]}

问题是它对两组的反应相同, 即使当前用户只有一组。即它给出了旧的响应

如果我重新启动 openam 服务器,这个问题就解决了,我会得到预期的结果。

     {"ismemberof":["cn=grp2,ou=groups,o=openam"]}

不需要重启 openam server 即可获得原始响应。

当我使用活动目录工作室连接到我的 LDAP 数据存储时,我可以看到针对 ismemberof 的用户更新的值是一个虚拟属性,但是当我点击 curl 响应时,只有旧的缓存一个。

【问题讨论】:

    标签: openam


    【解决方案1】:

    取决于使用的设置和数据存储,OpenAM 缓存用户身份的属性。通过使用持久搜索或通知更改控制 (AD),缓存与真实的 LDAP 服务器保持同步。

    如果您的 LDAP 服务器不支持持久搜索控制或您不允许通知更改控制,则缓存不能被弄脏,因此 OpenAM 将返回身份属性“isMemberOf”的过时值

    【讨论】:

    • 感谢 Bernhard 的回复。这意味着 openam ladp 服务器存在问题,....我们也曾就这个问题与 openam 开发人员进行过检查,但他们回复了,他们回答说存在限制openam rest api,请参考:forgerock.org/topic/cannot-read-user-belongs-to-which-group/…。有没有其他方法可以获取特定用户所属的组详细信息列表。
    • 我同意,当前的 openAM 12.0.0 在更新组成员身份的用户条目时缓存存在问题。条目仅针对组进行更新,但组更改的用户条目保持不变。在 openAM 重新启动时,可以看到更改。我可以看到更改反映在 openDJ DB 中,但未反映在 openAM 端,这意味着 openDJ 不会收到有关虚拟属性更改的通知,即 ismemberof
    • 这就是 OpenAM IdRepo API 的工作方式,它与 REST API 无关。 REST API 只是利用了 IdRepo API。默认情况下,使用缓存实现来缓存属性。只需确保通知模式(持久搜索或通知更改控制)按预期工作......或者不使用缓存实现
    • 从条目中读取组成员身份不符合 LDAP ... AD 需要它,而 OpenDJ 将其作为一项功能提供
    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多