使用openam 12.0.0.0发现openam的一个问题,使用api检索当前登录的组信息
"/json/users/username/?_fields=ismemberof"
情形:
我通过从openam控制台添加用户属性“ismemberof”尝试了这个rest 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服务器,以获得原始响应。
当我使用活动目录工作室连接到我的LDAP数据存储时,我可以看到针对用户更新的值为ismemberof这是一个虚拟属性,但是当我点击curl时,响应只是旧缓存的一个。
答案 0 :(得分:0)
取决于使用的设置和数据存储,OpenAM缓存用户身份的属性。通过使用持久搜索或通知更改控制(AD),缓存与真实LDAP服务器保持同步。
如果您的LDAP服务器不支持持久搜索控制或您不允许通知更改控制,则缓存不会变脏,因此OpenAM将返回身份属性的过期值' isMemberOf'