如何解决TestRail API调用时的身份认证失败问题
问题根因
认证失败核心是手动构造的Basic认证头不符合规范,同时存在3个配置错误:
- HTTP Basic认证规则要求
Basic后面的凭证内容,必须是登录邮箱:API密钥拼接后的Base64编码结果,直接传入明文字符串会被服务端判定为无效凭证。 - 额外携带浏览器生成的
tr_sessionCookie会干扰API认证逻辑,纯API调用不需要复用浏览器登录态的会话Cookie,携带后反而可能触发会话校验冲突。 - TestRail云版本(域名格式为
xxx.testrail.io)不支持使用账号登录密码做API认证,将API Key替换为登录密码的操作本身就不符合鉴权规则,必然校验失败,必须使用账号个人设置页生成的专属API Key。
正确配置方法
Postman 配置
不要手动编写Authorization请求头,使用Postman自带的认证配置模块避免编码错误:
- 接口地址填写正确值:
https://my.testrail.io/index.php?/api/v2/get_users - 切换到请求编辑页的
Authorization标签,认证类型下拉选择Basic Auth Username输入框填写你的TestRail登录邮箱,例如myemail@whatever.comPassword输入框填写个人设置页生成的API Key,不要填账号登录密码- 切换到
Headers标签,删除所有手动添加的Authorization头、以及Cookie字段里的tr_session内容,Postman会自动生成符合规范的编码后认证头 - 直接发起请求即可正常返回结果。
cURL 调用写法
最稳妥的方式是使用cURL自带的-u参数传入凭证,工具会自动完成Base64编码,不需要手动拼头,也不要携带多余Cookie:
curl --location --request GET 'https://my.testrail.io/index.php?/api/v2/get_users' \ -u 'myemail@whatever.com:你的专属APIKey'
如果需要手动构造请求头,先对邮箱:APIKey字符串做Base64编码,再拼接在Basic 后面才是合法格式,示例:
# 假设myemail@whatever.com:apikey 编码后结果为bXllbWFpbEB3aGF0ZXZlci5jb206YXBpa2V5 Authorization: Basic bXllbWFpbEB3aGF0ZXZlci5jb206YXBpa2V5
仍报错的排查清单
按上述步骤配置后如果依然返回认证失败,逐一核对以下项:
- 确认实例管理员已在TestRail后台开启全局API访问权限,权限未开启时即使凭证完全正确也会返回认证失败
- 确认使用的API Key是当前请求账号对应生成的,复制时没有带入多余空格、特殊字符
- 确认当前账号状态正常未被禁用,且拥有
get_users接口对应的用户列表访问权限 - 调用时暂时关闭本地抓包代理、网络代理,部分代理会自动剥离或篡改请求中的Authorization头,导致鉴权信息丢失
内容的提问来源于stack exchange,提问作者satacomp
相关产品推荐
相关产品推荐

