调用Confluence REST API获取空间列表返回空结果的原因
问题描述
使用包含超过1000个空间的Confluence Wiki时,通过如下curl命令调用接口获取空间列表:
curl -D -u user:password -X GET \ -H "Content-Type: application/json" https://[hostname]/rest/api/space
接口返回空的空间列表,响应内容如下:
{"results":[],"start":0,"limit":25,"size":0, "_links":{"self":https://[hostname]/rest/api/space, "e":https://[hostname],"context":""}}
可能原因
- curl命令参数写法错误,认证未生效:
-D参数的作用是导出响应头到指定文件,要将响应头输出到控制台必须写为-D -,当前命令里的-D -u会让curl把-u识别为存储响应头的文件路径,后续的user:password认证信息不会被解析,实际发送的是无认证信息的匿名请求。如果Confluence未开启匿名访问,或匿名用户无任何空间浏览权限,就会返回空结果。 - 认证凭据无效,请求被识别为匿名访问:如果Confluence接入了SSO单点登录(SAML、OIDC等),通常会默认禁用本地账号密码认证,传入的用户名密码无法通过校验;如果账号密码输入错误、账号被停用,部分版本Confluence不会直接返回401未授权错误,而是按匿名用户的权限返回可访问资源,匿名用户无空间权限时结果就为空。
- 账号缺少Confluence全局使用权限:Confluence的全局权限控制账号是否能登录使用应用,如果对应账号没有被授予「可以使用Confluence」的全局权限,哪怕账号状态正常,也无法访问任何站内资源,调用接口会返回空列表。
- 账号无任何空间的浏览权限:空间列表接口默认会做权限过滤,仅返回当前调用者拥有「浏览空间」权限的空间。如果账号没有被授予任何空间的访问权限,即使实例内有上千个空间,返回结果也会是空数组。
- 第三方插件拦截过滤了接口返回:如果Confluence安装了空间权限管控、多租户数据隔离、安全防护类的第三方应用,这类应用会改写REST API的返回结果,若插件配置规则有误,可能会将所有空间结果过滤掉,最终返回空列表。
内容的提问来源于stack exchange,提问作者Franck Dernoncourt
相关产品推荐
相关产品推荐

