起点:我有一个具有联邦安全性的WebSphere (它后面有一个)。我试图通过VMM用户的电子邮件地址来获取他/她的uid,但是我不知道它是如何被映射到底层Active实体(person,organizationalPerson objectClass,mail属性)的AD (模式)属性的。
(用一种不同的方式描述它:如果你看一下WAS,在“用户和组”-> "Manage“中有一个表,其中有一个电子邮件列,所以它被映射了)。但是,通过单击(“全局安全”-> )配置按钮“-> (有一个表,您可以选择) LDAP1行,并在”联邦存储库属性名称到LDAP属性映射“中检查表,我不认为‘E’列已经映射到AD属性。也许有一个隐式映射?)
所以,首先的问题是:
如何在WAS控制台上找到这个?或者,也许通过wsadmin (脚本)?
因此,由于这一点,我试图向前迈进,现在我将尝试使用VMM API找到它,但在正式文档中找不到第二个问题的答案:
是否可以以某种方式获取WebSphere VMM实体(虚拟成员管理器)的指定/可用属性?
有很多关于当您知道属性的名称时如何获取它们的例子,但是这一点都没有.
是的,我知道这是一个有点XY的问题,但请指导我一点。在此之前,非常感谢您。
为了提供一些代码示例,我尝试使用以下代码获取用户的uid:
public String testFetch(String email) throws Exception
{
String returnAttr = "uid";
// here in the search expression what should I wrire instead of the 'mail'?
String vmmSearchExpr = String.format("@xsi:type='PersonAccount' and mail='%s'", email);
DataObject root = SDOHelper.createRootDataObject();
DataObject searchCtrl = SDOHelper.createControlDataObject(root, null, SchemaConstants.DO_SEARCH_CONTROL);
searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, vmmSearchExpr);
@SuppressWarnings("unchecked")
List<String> props = searchCtrl.getList(SchemaConstants.PROP_PROPERTIES);
props.add(returnAttr);
Service service = new LocalServiceProvider(null);
DataObject searchRoot = service.search(root);
String result = "";
List<?> entities = searchRoot.getList(SchemaConstants.DO_ENTITIES);
if (entities.size() > 1) throw new RuntimeException("multiple users for an identity:" + vmmSearchExpr);
if (entities.size() > 0)
{
DataObject objdo = (DataObject) entities.get(0);
result = objdo.getString(returnAttr);
}else{
log("Got empty list There is no result.");
}
return result;
}发布于 2021-05-31 09:53:21
一个可能的解决方案是添加一个新的联邦存储库支持的属性(名称: mail,属性名称: mail,实体类型: PersonAccount):

在WAS重新启动之后,我能够使用搜索表达式。
@xsi:type='PersonAccount' and mail='<email address>'和上面的代码来获取对应的uid到给定的电子邮件地址。在c:\IBM\WebSphere\AppServer\etc\wim\setup\wimdbproperties.xml,中似乎有一些信息,好像“ibm”将是包含电子邮件地址的属性,尽管当我指定这个属性名而不是"mail“属性名时,我无法找到我的uid。
https://stackoverflow.com/questions/67769900
复制相似问题