API-интерфейс JIRA Cloud REST: ошибка (403) - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь использовать API-интерфейс JIRA Cloud REST в разрабатываемом приложении.Недавно я начал получать 403 ошибки.Моя интеграция была надежной примерно неделю назад, однако эти сообщения об ошибках стали очень частыми.

Я следовал документации по 3LO-кодам .В настоящее время у меня есть:

  1. приложение под названием «Настройка приложения» в панели инструментов приложения
  2. в панели управления приложениями, мое «Приложение» имеет доступ к обоим«API REST платформы Jira» и «Предоставление кода авторизации»
  3. в разделе «API REST платформы Jira» для моего «Приложения», Просмотр данных о проблемах Jira и Просмотр профилей пользователей опции добавлены / включены

При попытке аутентификации с помощью JIRA Cloud REST API кажется, что все работает как ожидалось.

  1. Я начинаю с того, что перенаправляю пользователя авторизовать «Приложение» для доступа к данным из JIRA через 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 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 в качестве кода ответа для метода поиска .

Ответы [ 2 ]

0 голосов
/ 09 января 2019

В итоге было решено использовать Basic Authentication через заголовок Authorization при отправке запросов в JIRA Cloud REST API:

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

Заголовки:

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

Базовая аутентификация будет удалена в будущем в соответствии с документацией API , поэтому она рассматривается как решение с временным интервалом.

0 голосов
/ 15 октября 2018

Две вещи ... (1) Ранее на этой неделе был пост, в котором также изменилось чье-то поисковое поведение в облаке.Возможно, вы захотите поискать этот пост, чтобы увидеть, как он был решен (я поищу его через мгновение и, если найду, добавлю ссылку сюда).Он использовал "api / 3", как и вы ... в документации сказано, что "api / 3" находится в бета-версии.Поэтому, возможно, попробуйте использовать «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
...