代码之家  ›  专栏  ›  技术社区  ›  Dacre Denny

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

  •  3
  • Dacre Denny  · 技术社区  · 6 年前

    我已经看了文件好几年了 3LO code grants . 目前,我有:

    1. application dashboard
    2. 在我的“应用程序”的“Jira平台restapi”下 查看Jira问题数据 查看用户配置文件 选项都已添加/启用

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

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

    3. 我现在第一次调用JIRA的cloudrestapi: https://api.atlassian.com/oauth/token/accessible-resources . 我使用 这是以前获取我的网站 cloud_id 通过这个电话。这是预期的工作,我现在有我的网站 云id

    4. 我现在尝试调用JIRA的Cloud REST API: https://api.atlassian.com/ex/jira/{MY_CLOUD_ID}/rest/api/3/search . 我使用

      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 回复  |  直到 5 年前
        1
  •  1
  •   HeavyDNickell    6 年前

    两件事(1) 本周早些时候有一个帖子说,有人在云端的搜索行为也发生了变化。你可能想找那篇文章,看看它是如何解决的(我会找它一会儿,如果我找到了,我会在这里添加链接)。他和你一样使用“api/3”。。。文档上说“api/3”是beta版。所以也许可以试试“api/2”?

    登录/身份验证调用:

    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
    
        2
  •  0
  •   Dacre Denny    5 年前

    最终的解决办法是 Basic Authentication 通过 Authorization 向JIRA的Cloud REST API发出请求时的标头:

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

    标题:

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

    according to the API documentation ,因此这被视为权宜之计。