如何编写SPML请求从Adaxes获取所有AD用户详细列表(适配TalenD)
获取所有AD用户的SPML请求(针对Softerra Adaxes)
我之前在使用Adaxes的SPML接口批量拉取AD用户时也踩过坑,确实因为官方文档不够详细走了不少弯路。结合你给出的单个用户查询示例,下面给你整理出能获取所有AD用户的正确SPML请求,还有关键参数的说明和注意事项:
正确的SPML请求代码
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <!-- 若需要身份验证,在此添加认证头(比如Basic Auth的Base64编码内容) --> <!-- <Authorization>Basic dXNlcjpwYXNzd29yZA==</Authorization> --> </soap:Header> <soap:Body> <spml:searchRequest xmlns:spml="urn:oasis:names:tc:SPML:2:0" returnData="all"> <spml:targetID>acme.com</spml:targetID> <spml:query xmlns:dsml="urn:oasis:names:tc:DSML:2:0:core"> <dsml:filter> <dsml:equalityMatch name="objectclass"> <dsml:value>user</dsml:value> </dsml:equalityMatch> </dsml:filter> </spml:query> </spml:searchRequest> </soap:Body> </soap:Envelope>
关键参数说明
<searchRequest>:替代单个查询的<lookupRequest>,这是SPML 2.0标准的批量搜索操作,专门用于获取符合条件的一组对象returnData="all":指定返回用户的所有属性;如果只需要特定属性(比如CN、uid、email),可以改成returnData="selected",再添加<spml:returnAttribute name="CN"/>这类节点列出需要的属性<targetID>:填写你的实际AD域名称,和你单个查询示例里的acme.com保持一致<dsml:filter>:通过DSML过滤器限定只搜索objectclass=user的对象,避免返回计算机、组等其他AD对象
重要注意事项
- 权限配置:确保用于SPML请求的Adaxes账号拥有读取所有AD用户的权限,且Adaxes的SPML服务已启用并允许执行
search操作 - 分页处理:如果AD用户数量较多,Adaxes会分页返回结果。响应中会包含
<spml:pagedResults>节点,里面有remaining(剩余用户数)和resumeToken,你需要在下一次请求中添加<spml:resumeToken>节点带上这个token,才能获取下一页数据 - Talend适配:在Talend的SOAP请求组件中,要正确设置SOAP Action为
urn:oasis:names:tc:SPML:2:0#search,并使用tXMLMap等组件解析响应中的多个<pso>节点(每个节点对应一个用户的详细信息)
内容的提问来源于stack exchange,提问作者Joubou Brio
相关产品推荐
相关产品推荐

