Jira API с python возвращает ошибку 401 для действительных учетных данных

#python #rest #jira #jira-rest-api

#python #rest #jira #jira-rest-api

Вопрос:

Я пытаюсь использовать библиотеку Jira python для выполнения некоторых довольно простых вещей. Даже перед тем, как что-либо сделать, конструктор завершается с ошибкой.

 address = 'https://myaddress.atlassian.net'
options = {'server': address}
un = 'my@user.com'
#un = 'my' #also doesn't work
pw = 'the_pasSword!'
cookie = (un, pw)

j = JIRA(options, basic_auth=cookie)
 

Это ВЕСЬ код.

Последняя строка завершается ошибкой с

ПРЕДУПРЕЖДЕНИЕ: root: получена восстанавливаемая ошибка из GET https://myaddress.atlassian.net/rest/api/2/serverInfo , повторит попытку [1/3] через 13.906688704524315с. Ошибка: 401

ПРЕДУПРЕЖДЕНИЕ: root: получена восстанавливаемая ошибка из GET https://myaddress.atlassian.net/rest/api/2/serverInfo , повторит попытку [2/3] в 4.071181495745648с. Ошибка: 401

ПРЕДУПРЕЖДЕНИЕ: root: получена восстанавливаемая ошибка из GET https://myaddress.atlassian.net/rest/api/2/serverInfo , повторит попытку [3/3] через 6.266303262421157с. Ошибка: 401

Попытка ввода учетных данных вручную в atlassian работает, и я могу войти в систему.

Есть идеи, почему эта очень простая попытка подключения не сработает?

Комментарии:

1. Это библиотека, которую вы используете? jira.readthedocs.io/en/master Похоже, что существует несколько способов аутентификации в JIRA, и это будет зависеть от того, как настроен ваш сервер JIRA.

Ответ №1:

Они обсуждали устаревшие пароли в basic auth. Попробуйте сгенерировать токен API и использовать его вместо вашего пароля.

https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-basic-auth-and-cookie-based-auth/

 address = 'https://myaddress.atlassian.net'
options = {'server': address}
un = 'my@user.com'
#un = 'my' #also doesn't work
token = 'the_tokEn'
cookie = (un, token)

j = JIRA(options, basic_auth=cookie)
 

Комментарии:

1. Это сработало! Однако… согласно developer.atlassian.com/cloud/jira/platform /… использование имени пользователя не будет поддерживаться, начиная с очень скоро. Что еще я должен сделать?

2. Похоже, вам следует просто продолжить и протестировать, используя идентификатор учетной записи, на который вы ссылались. Работает ли это при использовании этого?

3. В документах крайне неясно, что считается устаревшим. Связался с официальной поддержкой, и они сказали, что mail token продолжит работать, так что все, спасибо!

4. Начиная с 2020-01-03, он больше не работает с JIRA client версии 2.0.0, но все еще работает с вызовом curl: curl -v company.atlassian.net —электронная почта пользователя: токен

Ответ №2:

Пожалуйста, попробуйте этот код:

 from jira.client import JIRA
import logging
import getpass
import datetime
import os

# Clearing the screen
os.system('cls||clear')
# Getting user authentication data
print 'Please enter your authentication data'
USER = raw_input('Username: ')
PASSWORD = getpass.getpass('Password: ')
print
JIRA_URL = "YOUR_JIRA_URL"
i = datetime.datetime.now()
TODAY = ("%s/%s/%s" % (i.day, i.month, i.year) )

def connect_jira(log, jira_server, jira_user, jira_password):
    '''
    Connects to JIRA

    Returns None on error
    '''
    try:
        log.info("Connecting to JIRA: %s" % jira_server)
        jira_options = {'server': jira_server}
        jira = JIRA(options=jira_options, basic_auth=(jira_user, jira_password))
                                        # ^--- Note the tuple
        return jira
    except Exception,e:
        log.error("Failed to connect to JIRA: %s" % e)
        return e

# Creating logger
log = logging.getLogger(__name__)
# Creating a Jira connection object, jc
jc = connect_jira(log, JIRA_URL, USER, PASSWORD)
 

Комментарии:

1. ошибка 401. Почему это отличается? Журнал выводит html-код для страницы, на которой более или менее написано «ошибка 401»

2. @Gulzar Это работает на 100% при моей установке, но, как вы правильно выяснили в другом ответе, в новой версии Jira принимаются только токены.