如何告知Jira API我使用API令牌而非密码进行Basic认证
报错根因
你代码构造Basic认证凭证的逻辑存在低级错误:执行base64编码时传入的是固定字面量b"jira_user:jira_token",没有把之前定义的账号邮箱、API令牌变量的实际值拼接进去,Jira收到的认证信息是无效字符串,识别不到合法API令牌,就会返回密码认证已废弃的401错误。
修复方案
你可以任选以下一种写法调整代码:
- 手动构造认证头的修正写法:把变量实际值拼接后再做编码,不要直接写变量名字面量
(venv) $ cat fixed_demo.py import base64 import requests jira_user = 'me@myorg.com' jira_token = '9rXXXXXXXXXX5B' # 正确拼接变量值后转字节串编码 cred = "Basic " + base64.b64encode(f"{jira_user}:{jira_token}".encode("utf-8")).decode("utf-8") print("cred =", cred) headers = { "Accept": "application/json", "Content-Type": "application/json", "Authorization" : cred } projectKey = "NETOP-1987" url = f"https://myorg.atlassian.net/rest/api/3/search?jql=key={projectKey}" response = requests.get(url, headers=headers) print("response =", response) print("response.text =", response.text)
- 更稳妥的简化写法:直接用requests库自带的Basic认证能力,无需手动处理base64编码,避免写错
import requests from requests.auth import HTTPBasicAuth jira_user = 'me@myorg.com' jira_token = '9rXXXXXXXXXX5B' headers = { "Accept": "application/json", "Content-Type": "application/json" } projectKey = "NETOP-1987" url = f"https://myorg.atlassian.net/rest/api/3/search?jql=key={projectKey}" # 传入认证信息,库自动完成标准Basic认证逻辑 response = requests.get( url, headers=headers, auth=HTTPBasicAuth(jira_user, jira_token) ) print("response =", response) print("response.text =", response.text)
注意事项
- 认证用的账号字段必须是你Atlassian账号的绑定邮箱,不能用Jira内显示的用户名
- 确认传入的第二字段是账号对应的API令牌,不是账号登录密码
- 确保你的账号对目标项目有对应访问权限,避免认证通过后返回权限类报错
内容的提问来源于stack exchange,提问作者boardrider
相关产品推荐
相关产品推荐

