公司网站注意事项,网页制作基础教程黄洪杰,怎么弄自己的微信小程序,最好用的免费空间JIRA认证方式简述
JIRA接口调用有两种认证方式访问Jira Rest API#xff0c;基本认证⽅式(⽤户名和密码)和OAuth1认证方式。
基本认证⽅式#xff1a;因为⽤户名和密码会被浏览器重复地请求和发送#xff0c;即使采⽤ SSL/TLS 发送#xff0c;也会有安全隐患#xff0c;…JIRA认证方式简述
JIRA接口调用有两种认证方式访问Jira Rest API基本认证⽅式(⽤户名和密码)和OAuth1认证方式。
基本认证⽅式因为⽤户名和密码会被浏览器重复地请求和发送即使采⽤ SSL/TLS 发送也会有安全隐患因此不建议使⽤。 OAuth 认证⽅式 OAuth 是⼀种认证协议允许Jira⽤户(Resource Owner) 授权第三⽅应⽤访问他们能操作的Jira 内容Jira 使⽤ OAuth 1.0a版本。
java方式使用的依赖包
以前写的java的方式是通过google的oauth-client实现的。
dependencygroupIdcom.google.oauth-client/groupIdartifactIdgoogle-oauth-client/artifactIdversion1.22.0/version
/dependency
python代码示例
之前用Java程序调用过JIRA接口这次改成python调用接口发现跟java程序有些不一样同样的凭证通过java访问JIRA接口没有问题但是使用python时就会出现一些问题。
下面是调通后没有问题的代码
import requests
from requests_oauthlib import OAuth1# 配置 OAuth 信息
# 替换为你的 JIRA 服务器地址
JIRA_BASE_URL https://jira.example.com
# 在 JIRA 应用链接中配置的 Consumer Key
CONSUMER_KEY your_consumer_key
# 私钥对应的公钥是配置在JIRA中的
PRIVATE_KEY
-----BEGIN RSA PRIVATE KEY-----
your_private_key_here
-----END RSA PRIVATE KEY-----# 在获取 Access Token中根据生成的链接获取到的secret
CLIENT_SECRET your_consumer_secret
# 从 JIRA 获取的 Access Token
ACCESS_TOKEN your_access_token
# 从 JIRA 获取的 Access Token Secret
ACCESS_TOKEN_SECRET your_access_secret # 创建 OAuth1 对象这块比较重要主要是这里的参数跟java程序有些不同
oauth OAuth1(client_keyCONSUMER_KEY,rsa_keyPRIVATE_KEY,client_secretCLIENT_SECRETresource_owner_keyACCESS_TOKEN,resource_owner_secretACCESS_TOKEN_SECRET,signature_methodRSA-SHA1
)# 调用 JIRA REST API 示例获取问题详情
# 替换为实际的 Issue Key
issue_key TEST-123
# 最终请求的URL
url f{JIRA_BASE_URL}/rest/api/2/issue/{issue_key}# 发起请求
response requests.get(url, authoauth)# 处理响应
if response.status_code 200:print(Issue Details:, response.json())
else:print(fFailed to fetch issue. Status Code: {response.status_code})print(Response:, response.text)遇到的问题及解决方式
ModuleNotFoundError: No module named jwt
ModuleNotFoundError: No module named jwt 错误表明你的 Python 环境中没有安装 jwt 模块。这个模块通常是 PyJWT它用于处理 JSON Web Token (JWT) 的生成和验证。
安装PyJWT
pip install PyJWT
验证安装
python -c import jwt; print(jwt.__version__)如果没有报错说明安装成功并会打印 PyJWT 的版本号。 jwt.exceptions.InvalidKeyError:cound not parse th provided public key
这也是让我最困惑的问题public key不是在客户端的是在JIRA中配置的但是却提示public key有问题但是我通过java程序去访问是成功的所以JIRA中配置的应该也没有问题。
密钥内容应该没有问题所以我就检查了密钥的格式。
这也是python跟java不一样的我在java中就是将RSA私钥作为一个字符串使用是没有问题的所以也习惯的在python中使用字符串使用结果就出问题了。
检查公钥的格式
确保公钥的格式正确通常公钥以 PEM 格式存储包含以下内容
-----BEGIN PUBLIC KEY-----
base64_encoded_key
-----END PUBLIC KEY-----
检查点
公钥需要完整包括 -----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 标志。中间的内容应为 Base64 编码的公钥。
如果没有这些标志尝试手动添加。
signature_method_rejected
signature_method_rejected 错误表明 JIRA 不接受你在 OAuth1 请求中指定的签名方法。这通常是由于以下原因之一导致的
签名方法配置不正确JIRA 只支持 RSA-SHA1。JIRA 中的应用链接未正确配置。使用了不匹配的密钥对或者密钥格式错误。
这也是python方式跟java方式另外一个不同的地方在python中生成OAuth1对象时必须指定signature_methodRSA-SHA1
AttributeError: module jwt.algorithms has no attribute hashes
可能由于一下原因导致
没有安装cryptographyjwt和PyJWT同时存在引起冲突
安装 cryptography
pip install -U cryptography
解决冲突
# jwt卸载
pip uninstall jwt
# 保险起见将PyJWT一同卸载
pip uninstall PyJWT
# 重新安装PyJWT
pip install PyJWT 报没有权限必须登录
这又是一个让我很莫名奇妙的问题用java都是可以了用python就说没有权限必须登录难道让我使用基本认证方式。
想到了client_secret这个参数因为这个凭证在java中是用到的但是在网上找的示例中都没有提示用这个参数然后就尝试在生成OAuth1对象时加上这个结果成功了。
client_secretCLIENT_SECRET