【问题标题】:Accessing Jira REST api running behind apache proxy访问在 apache 代理后面运行的 Jira REST api
【发布时间】:2018-01-22 15:16:26
【问题描述】:

我正在尝试连接到在 apache 代理后面运行的 Jira REST API。我尝试使用 python-jira 模块来完成这项任务,只要我绕过 apache 代理授权直接连接到 Jira,它就可以正常工作。但是,随着 apache 代理启动,我不断收到“Err: 401 Unauthorized”错误。

问题是我需要提供两次授权凭据,一次用于代理,一次用于 Jira。

所有测试都在我的本地虚拟机上完成。

  • apache 代理在标准端口 80 上运行,并将 127.0.0.1/jira 重定向到 127.0.0.1:8080/jira
  • jira us 在 8080 端口上运行

这是有效的 curl 命令,其中:

  • jirauser - 用于授权 jirapass 的 jira 用户
  • 用于授权的jirapassword
  • dGVzdDp3d3c= - 是 base64 编码的 proxyuser:proxypass 字符串

它实际上正在运行并产生结果

curl -u 'jirauser:jirapass' -X GET -H "Authorization: Basic dGVzdDp3d3c=" -H "Content-Type: application/json" "http://127.0.0.1/jira/rest/api/2/search?jql=key=DEV4"

对于 python-jira 模块,我认为我需要调整“选项”参数以将“授权:基本 dGVzdDp3d3c =”添加到“标题”列表中,但不知何故它不起作用。

from jira import JIRA, JIRAError
import sys

username="Jira_username"
password="Jira_password"

jira_options = {
   'server': 'http://127.0.0.1/jira',
   'verify': True,
    'headers' : {
                        'X-Atlassian-Token': 'no-check',
                        'Cache-Control': 'no-cache',
                        'Content-Type': 'application/json',
                        'Authorization': 'Token token="dGVzdDp3d3c\="'
                }
}
try:
     jira = JIRA(
                 options    = jira_options,
                 basic_auth = (username,password),
                 validate   = True,
            )

except JIRAError as e:
     print("Failed in Jira connection initialisation with error [%s]" % e)
     sys.exit()

我也尝试使用 requests 库进行直接调用

r = requests.get('http://127.0.0.1/jira/rest/api/2/search?jql=key=DEV4',auth=('jirauser','jirapass'),headers={'Content-Type': 'application/json','Authorization': "基本 %s " % "dGVzdDp3d3c="})

但结果又是:401错误

我真的很困惑为什么 curl 命令有效但 python 代码失败这里有什么问题? (由于 curl 正在工作,我认为这不是环境设置中的问题)

【问题讨论】:

  • 您是否尝试过删除授权标头?这似乎与 basic_auth 冲突。当我连接到 jira 时,我通常不会传递额外的选项,也没有任何问题。
  • 我在没有授权标头的情况下开始了我的测试,但它不起作用。问题是我需要首先通过代理授权(这就是我发现我需要 Authorization 标头的地方),然后通过使用 basic_auth 的 Jira 授权。我在上面显示的 CURL 请求有效。问题是如何让 python 做同样的工作。那是我开始尝试将授权参数插入标题的时候。
  • 也许这会有所帮助? stackoverflow.com/questions/30872740/…

标签: python jira


【解决方案1】:

这对我有用。

from jira import JIRA

jira_options = {
   'server': '<your jira url>',
   'verify': True,
   'headers' : {
                    'X-Atlassian-Token': 'no-check',
                    'Cache-Control': 'no-cache',
                    'Content-Type': 'application/json',
               }
}

jira = JIRA(options=jira_options, basic_auth=('<username>', '<password>'), validate=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 2014-07-16
    • 2016-10-14
    • 2014-09-05
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多