带有 python 的 Jira API 在有效凭据上返回错误 401
Posted
技术标签:
【中文标题】带有 python 的 Jira API 在有效凭据上返回错误 401【英文标题】:Jira API with python returns error 401 on valid credentials 【发布时间】:2019-09-08 21:00:59 【问题描述】:我正在尝试使用 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,将 在 4.071181495745648 秒内重试 [2/3]。错误:401
警告:根:得到 来自 GET 的可恢复错误 https://myaddress.atlassian.net/rest/api/2/serverInfo,将重试 [3/3] 在 6.266303262421157 秒内。错误:401
在 atlassian 上手动尝试凭据确实有效,并且我能够登录。
知道为什么这种非常简单的连接尝试不起作用吗?
【问题讨论】:
这是您使用的库吗? jira.readthedocs.io/en/master 似乎有几种方法可以向 JIRA 进行身份验证,这取决于您的 JIRA 服务器的设置方式。 【参考方案1】:他们一直在讨论在基本身份验证中弃用密码。尝试生成 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)
【讨论】:
这成功了!但是...根据developer.atlassian.com/cloud/jira/platform/…,用户名的使用将很快开始不受支持。我还应该做什么? 看起来您应该继续使用您链接到的 accountID 进行测试。当你使用它时它会起作用吗? 文档非常不清楚什么被弃用。联系了官方支持,他们说邮件+令牌将继续工作,就是这样,谢谢! 从 2020-01-03 开始,它不再适用于 JIRA 客户端版本 2.0.0,但仍适用于 curl 调用:curl -v company.atlassian.net --user email:token【参考方案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)
【讨论】:
错误 401。为什么不一样?日志输出页面的 html 代码或多或少显示“错误 401” @Gulzar 这在我的安装中 100% 有效,但是正如您在另一个答案中正确发现的那样,在新的 Jira 版本中只接受令牌。以上是关于带有 python 的 Jira API 在有效凭据上返回错误 401的主要内容,如果未能解决你的问题,请参考以下文章
Python Jira Rest Api 代码生成无效字符串