JIRA-Python 的基本身份验证不再适用于 REST API 调用。接下来怎么办?

问题描述 投票:0回答:3

在 Python 中,我曾经能够使用一些简单的代码通过 REST 上的 JIRA 进行身份验证:

from jira import JIRA

my_JIRA_username = 'my_name'
my_JIRA_pass = 'my_password'
server = {'server': 'https://my_site.atlassian.net'}
jira = JIRA(server, basic_auth = (my_JIRA_username, my_JIRA_pass))

然后能够做一些简单的事情,例如:

my_issue = jira.issue('MYISSUE-1')
print my_issue.key

但是 JIRA 已经改变了一些事情,我猜测不再允许通过 REST API 进行这样的基本身份验证。 相反,我收到了 401 错误。

我厌倦了创建 API 令牌,如下所示: https://confluence.atlassian.com/cloud/api-tokens-938839638.html 但我不知道在哪里使用它(如果我只是将它用作密码,就像上面的代码一样,它就不起作用)。

我研究了 OAuth 作为替代方案,但我找不到任何从 A 点到 B 点对我来说有意义的代码。

相反,我发现了这样的事情: https://bitbucket.org/atlassianlabs/atlassian-oauth-examples/src/master/python/app.py

这对我来说纯粹是胡言乱语。 不可能那么复杂!

任何人都可以帮忙提供一个简单的 jira-python 示例,该示例使用基本身份验证之外的其他方式从初始化转移到简单的 REST 调用吗?

将不胜感激! 我几个月的工作现在毫无用处,只是因为我无法再进行身份验证。

此外,如果您能解释如何以及何时使用 JIRA 允许您在其云实例上生成的 API 令牌,我们将不胜感激,因为我也不明白!

python rest authentication jira jira-rest-api
3个回答
10
投票

由于基本身份验证中已不推荐使用密码,因此将使用 API 令牌来代替它(正如您偶然发现的那样)。在您的代码中,您需要使用

email
代替
username
并使用
apiToken
代替密码。在你的代码中它应该是

# jira = JIRA(server, basic_auth = (my_JIRA_username, my_JIRA_pass))
jira = JIRA(server, basic_auth = (email, apiToken))

尝试一下并告诉我们效果如何。


0
投票

按照上述方式在此处添加此解决方案在使用 API 令牌的较新版本中不起作用。希望有帮助!

from jira import JIRA

# Basic Jira options
jira_options = {
    "server": "jour jira url",
    "verify": False # for self signed certs - otherwise the path
}

# create jira object with api token as auth method
jira_obj = JIRA(
    options=jira_options,
    token_auth="your api token here"
)

-1
投票

atlassian 的这个回答对我帮助很大:

https://community.atlassian.com/t5/Jira-questions/How-to-use-API-token-for-REST-calls-in-Python/qaq-p/760940

    #!/usr/bin/python3.6

# library modules
from jira import JIRA

user = '[email protected]'
apikey = 'your0api0key0here'
server = 'https://SITE_NAME.atlassian.net'

options = {
 'server': server
}

jira = JIRA(options, basic_auth=(user,apikey) )

ticket = 'KRP-11697'
issue = jira.issue(ticket)

summary = issue.fields.summary

print('ticket: ', ticket, summary)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.