【问题标题】:Basic authentication with jira-python使用 jira-python 进行基本身份验证
【发布时间】:2021-11-17 14:59:17
【问题描述】:

我是 Python 的新手,jira-python 库的新手,网络编程的新手,尽管我在应用程序和集成编程以及数据库查询方面确实有相当多的经验(尽管已经有一段时间了)。

使用 Python 2.7 和请求 1.0.3

我正在尝试使用这个库 - http://jira-python.readthedocs.org/en/latest/ 使用 Python 查询 Jira 5.1。我使用未经身份验证的查询成功连接,但我必须更改 client.py 中的一行,更改

我变了

self._session = requests.session(verify=verify, hooks={'args': self._add_content_type}) 

self._session = requests.session() 

我不知道我在做什么,但在更改之前我收到了一个错误,在更改之后我得到了成功返回的项目名称列表。

然后我尝试了基本身份验证,以便我可以利用我的 Jira 权限并进行报告。最初也失败了。我对

做了同样的改变
def _create_http_basic_session

client.py 中,但现在我又遇到了另一个错误。所以问题没有解决。现在我得到一个不同的错误:

HTTP Status 415 - Unsupported Media Type
type Status report
message Unsupported Media Type

description The server refused this request because the request entity is in
a format not` `supported by the requested resource for the requested method 
(Unsupported Media Type).

然后我决定只使用 requests 模块做一个超级简单的测试,我相信 jira-python 模块正在使用它,这段代码似乎让我登录了。我得到了很好的回应:

import requests

r = requests.get(the_url, auth=(my username , password))
print r.text

有什么建议吗?

【问题讨论】:

  • 请求在 1.0 之后破坏了一些兼容性,并且您的 jira-python 可能不兼容。我提出了一个拉取请求,并进行了一些更改以支持 requests-1.0+ bitbucket.org/bspeakmon/jira-python/pull-request/11/…
  • @Neal Caidin,请检查我的答案,因为这是 Jira 官方文档中的最新答案。

标签: python jira


【解决方案1】:

以下是我在 Python 脚本中使用带有身份验证的 jira 模块的方法:

from jira.client import JIRA
import logging

# Defines a function for connecting to Jira
def connect_jira(log, jira_server, jira_user, jira_password):
    '''
    Connect to JIRA. Return 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 None

# create logger
log = logging.getLogger(__name__)

# NOTE: You put your login details in the function call connect_jira(..) below!

# create a connection object, jc
jc = connect_jira(log, "https://myjira.mydom.com", "myusername", "mypassword")

# print names of all projects
projects = jc.projects()
for v in projects:
       print v

【讨论】:

  • 这是您用来连接 JIRA 的对象。如果您使用的是 https,则可能是由于没有证书。在这种情况下,jira_options 中有一个验证参数设置为 false
  • 如果我使用社交注册进行注册,如何登录?
【解决方案2】:

以下 Python 脚本连接到 Jira 并进行基本身份验证并列出所有项目。

from jira.client import JIRA
options = {'server': 'Jira-URL'}
jira = JIRA(options, basic_auth=('username', 'password'))
projects = jira.projects()
for v in projects:
   print v

它会打印您的 Jira 实例中所有可用项目的列表。

【讨论】:

    【解决方案3】:

    问题:

    自 2019 年 6 月起,在 Jira 或 Confluence Cloud 中使用具有基本或基于 cookie 身份验证的 REST 端点的 Atlassian Cloud 用户将需要更新其应用或集成流程以使用 API 令牌、OAuth 或 Atlassian Connect。

    在 2019 年 6 月 5 日之后,尝试使用 Atlassian 帐户密码通过基本身份验证进行身份验证将返回无效凭据错误。

    参考:Deprecation of basic authentication with passwords for Jira and Confluence APIs

    上述问题的解决方案:

    您可以使用 API 令牌对 Atlassian 云产品的脚本或其他进程进行身份验证。您从 Atlassian 帐户生成令牌,然后将其复制并粘贴到脚本中。

    如果您使用两步验证进行身份验证,您的脚本将需要使用 REST API 令牌进行身份验证。

    从您的 Atlassian 帐户创建 API 令牌的步骤:

    1. 登录https://id.atlassian.com/manage/api-tokens
    2. 点击创建 API 令牌。
    3. 在出现的对话框中,为您的令牌输入一个易于记住且简洁的标签,然后单击创建。
    4. 点击复制到剪贴板,然后将令牌粘贴到您的脚本中。

    参考:API tokens

    Python 3.8 代码参考

    from jira.client import JIRA
    jira_client = JIRA(options={'server': JIRA_URL}, basic_auth=(JIRA_USERNAME, JIRA_TOKEN))
    issue = jira_client.issue('PLAT-8742')
    print(issue.fields.summary)
    

    【讨论】:

    • 有没有办法不使用纯密码不使用api-token?其他工具允许打开页面以生成令牌或保存活动会话一次。
    【解决方案4】:

    不要更改库,而是将您的凭据放入 ~/.netrc 文件中。

    如果你把它们放在那里,你也可以使用 curl 或 wget 测试你的调用。

    我不再确定与 Jira 5.x 的兼容性,目前仅测试了 7.x 和 6.4。如果您设置一个实例进行测试,我也可以修改集成测试以针对它运行。

    我的幸运猜想是你用那个改变打破了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2017-06-13
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2017-10-06
      相关资源
      最近更新 更多