You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用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,请求成功!

但遇到两个核心问题:

  1. 调用任何业务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)
  1. 使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:45:17