Аналогичные остальные вызовы ведут себя по-разному: успешный вызов на один сервер Jira, а ошибка входа на другой сервер Jira - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь сделать GET-вызов покоя двум разным серверам Jira, одинаковым версия 7.13.2

Два сервера: jira2.xyz.com и jira3.xyz.com . Я вошел в оба из них.

jira2.xyz.com и jira3.xyz.com оба входят в систему через LDAP , когда я нажму кнопку входа. Единственное отличие в процессе входа в систему двух серверов заключается в том, что jira2.xyz.com напрямую регистрируется через LDAP , тогда как для jira3.xyz.com требуется один дополнительный шаг через DUO включен pu sh уведомление / ввод пароля. Однако шаг DUO не требуется каждый раз, когда я выхожу из системы и снова захожу на jira3.xyz.com (возможно, DUO поддерживает какой-то сеанс).

Код, который ПРОХОДИТ и дает ожидаемый вывод:

result=$(curl -X GET --header "Accept: application/json" "https://jira2.xyz.com/rest/api/2/issue/ISSUE-29142?fields=status")
    echo "Response from server ..." $result
    echo "Key is : "
    key=($( echo $result | jq .'key' ))
    echo $key
    exit

Код, который НЕ УКАЗАН:

result=$(curl -X GET --header "Accept: application/json" "https://jira3.xyz.com/rest/api/2/issue/ISSUE-29089?fields=status")
echo "Response from server ..." $result
echo "Key is : "
key=($( echo $result | jq .'key' ))
echo $key
exit

В результате сбоя выдается сообщение об ошибке ниже:

{"errorMessages":["You do not have the permission to see the specified issue.","Login Required"],"errors":{}}

Как мы видим из вышеизложенного, нет никакой разницы в кодах, кроме имени сервера.

Не уверен, почему это странное поведение. Пожалуйста, дайте мне знать, если вы считаете, что я упустил какие-либо важные детали. Я разрабатываю это на Windows 10.

РЕДАКТИРОВАТЬ 1: START

Запуск команды curl с опцией -v для приведенных ниже продуктов jira3 вывод (я старался изо всех сил (довольно трудно для меня, поскольку я не очень хорош в чтении сетевых журналов) и просто отредактировал некоторые значения, просто чтобы убедиться, что я не выдаю какие-либо подробности, которые я не должен):

Note: Unnecessary use of -X or --request, GET is already inferred.
* STATE: INIT => CONNECT handle 0x800012345; line 1491 (connection #-5000)
* Added connection 0. The cache now contains 1 members
* STATE: CONNECT => WAITRESOLVE handle 0x800012345; line 1532 (connection #0)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying a1b1:1234:4321:5678::zz0:4b3:443...
* TCP_NODELAY set
* STATE: WAITRESOLVE => WAITCONNECT handle 0x800012345; line 1611 (connection #0)
* Connected to jira3.xyz.com (a1b1:1234:4321:5678::zz0:4b3) port 443 (#0)
* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x800012345; line 1667 (connection #0)
* Marked for [keep alive]: HTTP default
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* STATE: SENDPROTOCONNECT => PROTOCONNECT handle 0x800012345; line 1682 (connection #0)
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [87 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3155 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: C=US; ST=Missouri; L=Kansas CIty; O=xyz Corporation; CN=*.xyz.com
*  start date: Jun  4 16:43:33 2018 GMT
*  expire date: Jun  4 17:13:32 2020 GMT
*  subjectAltName: host "jira3.xyz.com" matched cert's "*.xyz.com"
*  issuer: <Some issuer detail, which I just replaced by few random characters>
*  SSL certificate verify ok.
* STATE: PROTOCONNECT => DO handle 0x800012345; line 1701 (connection #0)
} [5 bytes data]
> GET /rest/api/2/issue/ISSUE-29089?fields=status HTTP/1.1
> Host: jira3.xyz.com
> User-Agent: curl/7.66.0
> Accept: application/json
>
* STATE: DO => DO_DONE handle 0x800012345; line 1756 (connection #0)
* STATE: DO_DONE => PERFORM handle 0x800012345; line 1877 (connection #0)
{ [5 bytes data]
* Mark bundle as not supporting multiuse
* HTTP 1.1 or later with persistent connection
< HTTP/1.1 401
< X-AREQUESTID: 934x7042171x9
< X-ANODEID: node2
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< Content-Security-Policy: frame-ancestors 'self'
< X-ASEN: SEN-8803321
* Added cookie atlassian.xsrf.token="ABCD-WXYZ-1234-4PWR_1f2g5s3gs52h7d645gh673h5Fg2F425gsty27856_lout" for domain jira3.xyz.com, path /, expire 0
< Set-Cookie: atlassian.xsrf.token=ABCD-WXYZ-1234-4PWR_1f2g5s3gs52h7d645gh673h5Fg2F425gsty27856_lout; Path=/; Secure
< X-AUSERNAME: anonymous
< Cache-Control: no-cache, no-store, no-transform
< WWW-Authenticate: OAuth realm="https%3A%2F%2Fjira3.xyz.com"
< Content-Type: application/json;charset=UTF-8
< Date: Mon, 23 Mar 2020 20:34:00 GMT
* Added cookie BIGipServer~Prod~pool_jira3_prd_8080="120400004.12345.8765" for domain jira3.xyz.com, path /, expire 0
< Set-Cookie: BIGipServer~Prod~pool_jira3_prd_8080=120400004.12345.8765; path=/; Httponly; Secure
* no chunk, no close, no size. Assume close to signal end
* Marked for [closure]: HTTP: No end-of-message indicator
<
{ [109 bytes data]
* nread <= 0, server closed connection, bailing
* STATE: PERFORM => DONE handle 0x800012345; line 2067 (connection #0)
* multi_done
100   109    0   109    0     0     56      0 --:--:--  0:00:01 --:--:--    56
* Closing connection 0
} [5 bytes data]
* TLSv1.2 (OUT), TLS alert, close notify (256):
} [2 bytes data]
* The cache now contains 0 members
Response from server ... {"errorMessages":["You do not have the permission to see the specified issue.","Login Required"],"errors":{}}
Key is :
null

РЕДАКТИРОВАТЬ 2: КОНЕЦ

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Глядя на упомянутую вами команду curl, я не вижу ни имени пользователя, ни пароля.

Команда curl должна выглядеть следующим образом:

curl -D- -u USERNAME:PASSWORD  https://jira3.xyz.com/rest/api/2/issue/ISSUE-29089?fields=status

Возможно, команда curl успешно выполняется в jira2, потому что проблемы доступны для просмотра (publi c) без необходимости входа в систему:

Попробуйте получить доступ к той же проблеме Jira, которая была успешно найдена с помощью rest. Попробуйте получить доступ через браузер с URL-адресом в сеансе гостевого режима с chrome.

https://jira2.xyz.com/browse/ISSUE-29142

Если Jira2 перенаправлен на страницу входа в систему, тогда откажитесь от моего ответа. На данный момент это мой единственный диагноз.

0 голосов
/ 26 марта 2020

Документация jira по адресу https://developer.atlassian.com/cloud/jira/platform/jira-rest-api-cookie-based-authentication/ гласит:

" REST API Jira защищен теми же ограничениями, которые предоставляются через стандартную сеть Jira. interface. "

Таким образом, вышеприведенное утверждение по существу означает, что сервер jira2 в этом случае настроен для аутентификации через AD любой остальной вызов на этот сервер также будет аутентифицирован через AD ( , т.е. , нет необходимости явно указывать учетные данные в запросе ) и как jira3 настроен на использование 2FA (AD + DUO) , поэтому нам необходимо предоставить токен API для успешного вызова остальных.

Согласно документации:

Если вы включите двухэтапную проверку для учетной записи, которая используется сценариями или службами для доступа к API-интерфейсам Atlassian Cloud REST, эта учетная запись не сможет использовать пароль для базовых c проверка подлинности по API REST. Вместо этого мы рекомендуем использовать токен API, хотя администратор организации может исключить соответствующую учетную запись из двухэтапной проверки. Подробнее о токенах API.

Соответствующая документация по 2FA : https://confluence.atlassian.com/cloud/two-step-verification-976161185.html

...