无法使用Refresh Token刷新JWT API Key及访问Deltek ComputerEase API
Deltek ComputerEase API 授权问题解决指南
背景
我正在对接Deltek ComputerEase API,已持有API key ID、API key和Refresh Token。目前能成功调用授权端点(返回状态码200),代码如下:
import requests url = "https://api.computerease.com/v1/authorization" headers = {'Authorization': 'secret'} response = requests.get(url, headers=headers) print(response.text) # 返回状态码200,请求成功!
但遇到两个核心问题:
- 调用任何业务API端点都会返回
unauthorized错误,代码示例:
url = "https://api.computerease.com/v1/catalog/job" payload = {} headers = {'Authorization': 'secret'} response = requests.request("GET", url, headers=headers, data=payload) print(response.text)
- 使用Refresh Token刷新API Key时同样返回
unauthorized错误,代码示例:
base_url = "https://api.computerease.com/v1" application_key_uuid= "secret" # 密钥刷新端点 url = f"{base_url}/company-key/{application_key_uuid}/rotate-key" # 发起PUT请求 response = requests.put(url) # 处理响应 if response.status_code == 200: new_key_data = response.json() print("New API Key:", new_key_data.get("new_key")) else: print("Failed to rotate key:", response.status_code, response.text)
我是JWT类型API的新手,求解决思路。
问题分析与修复方案
结合Deltek ComputerEase API官方文档的授权规则,问题出在认证方式不符合要求:
1. 业务接口调用的认证格式错误
官方文档明确要求:除授权端点外,所有其他API接口的请求头必须使用Bearer {JWT_TOKEN}格式,而不是直接传入原始API密钥。
- 你调用
/v1/authorization端点的目的是获取有效的JWT Token,该端点的响应应该包含一个JWT字符串(而非单纯返回200),需要先提取这个Token。 - 修改业务接口的请求头为
{'Authorization': f'Bearer {获取到的JWT_TOKEN}'}。
2. 密钥刷新请求缺少认证信息
调用/company-key/{application_key_uuid}/rotate-key端点时,必须携带有效的JWT Token认证:
- 该PUT请求需要在请求头中添加
Bearer {JWT_TOKEN}格式的Authorization字段,不能发起无认证的请求。 - 同时确认你的Refresh Token或API密钥拥有执行密钥刷新的权限(部分场景需要管理员权限)。
修正后的示例代码
获取JWT Token并调用业务接口
import requests # 第一步:获取JWT Token auth_url = "https://api.computerease.com/v1/authorization" auth_headers = {'Authorization': '你的原始API密钥'} # 替换为你实际的secret值 auth_response = requests.get(auth_url, headers=auth_headers) if auth_response.status_code == 200: # 从响应中提取JWT Token,字段名请根据实际响应调整(通常是token或access_token) jwt_token = auth_response.json().get('token') else: print("获取授权失败:", auth_response.text) exit() # 第二步:调用业务接口 job_url = "https://api.computerease.com/v1/catalog/job" job_headers = {'Authorization': f'Bearer {jwt_token}'} job_response = requests.get(job_url, headers=job_headers) print(job_response.text)
刷新API Key
import requests base_url = "https://api.computerease.com/v1" application_key_uuid = "你的application_key_uuid" api_key = "你的原始API密钥" # 先获取JWT Token auth_url = f"{base_url}/authorization" auth_headers = {'Authorization': api_key} auth_response = requests.get(auth_url, headers=auth_headers) if auth_response.status_code != 200: print("获取授权失败:", auth_response.text) exit() jwt_token = auth_response.json().get('token') # 发起密钥刷新请求 rotate_url = f"{base_url}/company-key/{application_key_uuid}/rotate-key" rotate_headers = {'Authorization': f'Bearer {jwt_token}'} rotate_response = requests.put(rotate_url, headers=rotate_headers) if rotate_response.status_code == 200: new_key_data = rotate_response.json() print("新API Key:", new_key_data.get("new_key")) else: print("刷新密钥失败:", rotate_response.status_code, rotate_response.text)
内容的提问来源于stack exchange,提问作者Raghunandan
相关产品推荐
相关产品推荐

