无法调用Jira Cloud REST API:提示问题不存在或无权限
问题背景
正在将内部C# Windows应用从旧Jira SOAP协议升级到REST API,使用JiraRestClient.NET测试时,代码和Postman/Insomnia都返回错误:Issue does not exist or you do not have permission to view it。已确认凭证可登录网页查看对应问题,但无效凭证也返回相同错误。
测试代码:
[TestFixture] public class JiraRestClientTest { [Test] public void OneTest() { IJiraRestClient client = new JiraRestClient("https://xxxx.atlassian.net", "myemail@domain.com", "MyPassword"); IJiraIssue issue = client.GetIssue("TASR-456"); Assert.AreEqual("TASR-456", issue.Key); Assert.IsFalse(issue.IsSubtask); } }
Postman返回的错误JSON:
{ "errorMessages": [ "Issue does not exist or you do not have permission to see it." ], "errors": {} }
可能的解决步骤
改用API令牌而非密码认证
对于Atlassian Cloud版Jira,直接使用账号密码调用REST API会被拦截,需要生成专用的API令牌替代密码。步骤:登录Atlassian账号 → 进入「安全设置」→ 创建API令牌,将代码中的MyPassword替换为这个令牌。验证API端点的正确性
确保请求的Jira域名正确,且REST API端点路径无误。标准的获取问题端点是/rest/api/3/issue/{issueKey},可以直接在浏览器中用登录状态访问该URL,确认是否能返回问题数据。检查用户的API访问权限
确认账号拥有「Jira Software用户」权限,且项目权限中允许该用户查看目标问题。另外,有些团队会限制API访问范围,需要联系管理员确认账号是否具备API调用权限。核对问题键的准确性
确认问题键TASR-456的大小写、项目前缀(TASR)完全正确,不存在拼写错误。可以在Jira网页中复制问题键直接使用,避免手动输入错误。开启调试查看原始请求
在代码中添加日志,输出完整的请求URL、请求头(尤其是Authorization部分),或者在Postman中查看请求详情,确认认证信息是否正确传递。比如,Basic认证需要将邮箱:API令牌进行Base64编码后放在Authorization头中。
修正后的测试代码示例
[TestFixture] public class JiraRestClientTest { [Test] public void OneTest() { // 替换为你的API令牌 string apiToken = "your-generated-api-token"; IJiraRestClient client = new JiraRestClient("https://xxxx.atlassian.net", "myemail@domain.com", apiToken); IJiraIssue issue = client.GetIssue("TASR-456"); Assert.AreEqual("TASR-456", issue.Key); Assert.IsFalse(issue.IsSubtask); } }
内容的提问来源于stack exchange,提问作者Robert

