JIRA Cloud REST API:禁止(403)错误

时间:2018-10-14 22:43:58

标签: rest oauth jira jira-rest-api

我正在尝试在正在开发的应用程序中利用JIRA Cloud REST API。最近,我开始收到403错误。直到大约一周前,我的集成才是可靠的,但是这些错误响应已变得非常频繁。

我遵循了3LO code grants的文档。目前,我有:

  1. application dashboard下设置名为“ App”的应用程序
  2. 在应用程序仪表板中,我的“应用程序”可以访问“ Jira平台REST API”和“授权代码授予”
  3. 在“我的应用”的“ Jira平台REST API”下,同时添加/启用了查看Jira问题数据查看用户个人资料选项

当尝试通过JIRA Cloud REST API进行身份验证时,一切似乎都可以正常工作。

  1. 我首先重定向用户以授权“ App”通过https://accounts.atlassian.com/authorize从JIRA访问数据。我在此请求中包括以下范围:offline_access read:jira-user read:jira-work,以确保必需的读取访问权限和令牌更新功能(即offline_access

  2. 在授权后,我被重定向回我的应用程序,并通过https://accounts.atlassian.com/oauth/token(使用提供的重定向code)请求访问令牌。这样成功了,我现在有有效的access_tokenrefresh_token

  3. 我现在首次调用JIRA的Cloud REST API:https://api.atlassian.com/oauth/token/accessible-resources。我使用先前获得的access_token来通过此调用来获取我的网站cloud_id。这可以按预期工作,我现在有自己的网站cloud_id

  4. 我现在尝试秒调用JIRA的Cloud REST API:https://api.atlassian.com/ex/jira/{MY_CLOUD_ID}/rest/api/3/search。我通过以下请求标头以与以前相同的方式使用access_token

    headers: {
        'Authorization': `Bearer { MY_ACCESS_TOKEN }`,
        'Accept': 'application/json'
    }
    

我一直得到的答复如下: Forbidden 403. Encountered a 403 Forbidden error while loading this page.

如前所述,这在过去一周左右的时间内运行良好。不幸的是,JIRA文档没有将403列为search method的响应代码。

2 个答案:

答案 0 :(得分:1)

两件事...(1)本周早些时候有一篇帖子,其中某人在云中的搜索行为也发生了变化。您可能需要查找该帖子以查看其解决方式(我会稍后查找,如果找到它,则在此处添加链接)。他和您一样都在使用“ api / 3” ...文档说“ api / 3”是beta版。那么也许尝试使用“ api / 2”?

(2)我不知道此代码是否有帮助...它访问REST API,但我进行的调用与您的调用有很大不同。这与JIRA的内部版本(最新的代码)相对。我没有要测试的云实例。

要求登录/验证:

Const APIAuthPath = "/rest/auth/1/session"


Sub Call_JIRALogin(pUserName, pPassword)

    Dim JIRASendString As String, JIRASendURL As String

    JIRASendURL = BaseURL1 & APIAuthPath

    JIRASendString = " {"
    JIRASendString = JIRASendString & Chr(34) & "username" & Chr(34) & ":" & Chr(34) & pUserName & Chr(34)
    JIRASendString = JIRASendString & ","
    JIRASendString = JIRASendString & Chr(34) & "password" & Chr(34) & ":" & Chr(34) & pPassword & Chr(34)
    JIRASendString = JIRASendString & "}"


    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    objHTTP.setOption 2, 13056


    With objHTTP
        .Open "POST", JIRASendURL, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Accept", "application/json"
        .send (JIRASendString)
        CResponse1 = .responseText
        cCookie1 = "JSESSIONID=" & Mid(CResponse1, 42, 32) & "; Path=/Jira"  '*** Extract the Session-ID
        CStatus1 = .Status
    End With

后续通话:

Sub BBB_SingleIssue_Driver(inIssueId)


    Dim JIRASendURL

    CurrIssue = inIssueId

    JIRASendURL = BaseURL1 & "/rest/api/2/issue/" & CurrIssue

    With objHTTP
        .Open "GET", JIRASendURL, False
        .setRequestHeader "Set-Cookie", cCookie1 '*** see Create a "Cookie"
        .send
        CResponse1 = .responseText
        CStatus1 = .Status
    End With

    If CStatus1 <> 200 Then
        MsgBox ("Failed to retrieve issue " & CurrIssue & "  status code : " & CStatus1)
        GlobalHttpStatus = CStatus1
        GlobalHttpResponse = CResponse1
        GlobalStep = "Retrieve Issue: " & CurrIssue
        GoTo SingleIssueErrOut
    End If

    '  handle a good response

SingleIssueErrOut:

    '  handle an error    

End Sub

答案 1 :(得分:0)

最后的解决方案是在向JIRA的Cloud REST API发送请求时,通过Authorization标头使用Basic Authentication

https://CLOUD_ID.atlassian.net/rest/api/3/API_METHOD   

标题:

'Authorization': 'Basic ZGFjcmVAb...',
'Accept': 'application/json'

将来的according to the API documentation中将删除基本身份验证,因此将其视为权宜之计。