Active Collab(托管版)认证仅获intent_id无法获取完整JWT问题
ActiveCollab API认证对接问题排查与解决
问题梳理
- 直接调用
/issue-token端点时返回500错误,响应内容:{"type": "ValueError","message": "DOMDocument::loadXML(): Argument #1 ($source) must not be empty","code": 0} - 按照托管版两步流程调用时,第一步
https://activecollab.com/api/v1/external/login仅返回intent_id,未获取到预期的完整JWT,且后台未找到API权限相关设置,curl测试结果一致。
核心原因与解决方案
1. 托管版与自建版认证流程差异
直接调用/issue-token仅适用于自建部署版ActiveCollab,官方托管版必须走两步intent认证流程,你之前的第一步返回intent_id是正常行为,并非异常。
2. 托管版完整认证流程
第一步:获取intent_id
调用https://activecollab.com/api/v1/external/login传递邮箱和密码,返回intent_id(此步骤仅用于生成临时认证凭证):
curl -d "email=your_email@example.com&password=your_password" https://activecollab.com/api/v1/external/login --ssl-no-revoke
返回示例:
{"intent_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
第二步:用intent_id换取JWT
调用https://app.activecollab.com/{你的客户编号}/api/v1/issue-token-intent,需设置Content-Type: application/json请求头,传递intent_id参数:
curl -X POST \ https://app.activecollab.com/12345/api/v1/issue-token-intent \ -H "Content-Type: application/json" \ -d '{"intent_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}'
成功响应示例:
{"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user_id": 123, "expires_at": 1699999999}
3. 500错误的根源
托管版环境下直接调用/issue-token会缺少租户标识等必要上下文参数,导致服务器端XML解析失败,触发你遇到的DOMDocument::loadXML()参数为空错误。
4. API权限说明
ActiveCollab没有单独的API权限开关,只要你的账号满足以下条件即可正常获取JWT:
- 账号为系统管理员,或拥有至少一个项目的访问权限
- 账号未被禁用/锁定
- 邮箱、密码输入正确
额外排查点
如果第二步调用仍失败,检查:
{你的客户编号}是否正确(可从托管版访问URL提取,如https://app.activecollab.com/12345/...中的12345)- 请求头是否正确设置
Content-Type: application/json,请求体是否为合法JSON格式 intent_id是否过期(有效期极短,需获取后立即调用第二步)
内容的提问来源于stack exchange,提问作者David Bremner
相关产品推荐
相关产品推荐

