Python中验证RightSignature私有API Token遇invalid_token错误求解决
RightSignature API 请求返回
invalid_token 问题排查与解决 问题场景
作为Python新手,尝试通过私有API Token连接RightSignature API,按官方文档要求携带API Token、Client ID和Client Secret请求/public/v2/me端点获取用户信息,私密信息存储在.env文件中,但请求返回{"error":"invalid_token","error_description":null}。
原代码:
from flask import Flask, request, jsonify import os import requests from dotenv import load_dotenv API_HOST = "api.rightsignature.com" load_dotenv() API_TOKEN = os.environ.get("API_TOKEN") CLIENT_ID = os.environ.get("client_id") CLIENT_SECRET = os.environ.get("client_secret") headers = { "private-api-key" : API_TOKEN, "client-id" : CLIENT_ID, "client-secret" :CLIENT_SECRET } url = "https://{}/public/v2/me".format(API_HOST) response = requests.get(url, headers=headers) print(response.text)
排查与解决步骤
1. 校验环境变量键名匹配
.env文件中的变量名通常采用全大写格式(如CLIENT_ID、CLIENT_SECRET),但原代码中使用小写键名client_id、client_secret获取值,可能导致加载不到正确的凭证。
- 确认
.env文件内的键名与代码中os.environ.get()的参数完全一致(包括大小写) - 示例修正:将代码中的
client_id改为CLIENT_ID,client_secret改为CLIENT_SECRET
2. 验证凭证有效性
- 登录RightSignature开发者后台,确认API Token、Client ID、Client Secret是最新生成且未过期的,同时具备访问
/public/v2/me端点的权限 - 用curl直接测试凭证,排除代码逻辑问题:
curl -H "private-api-key: YOUR_API_TOKEN" -H "client-id: YOUR_CLIENT_ID" -H "client-secret: YOUR_CLIENT_SECRET" https://api.rightsignature.com/public/v2/me
若curl也返回相同错误,需重新生成有效凭证。
3. 检查请求头命名格式
部分API对请求头的大小写有严格校验,尝试将请求头改为官方文档指定的驼峰格式:
headers = { "Private-API-Key": API_TOKEN, "Client-ID": CLIENT_ID, "Client-Secret": CLIENT_SECRET }
4. 调试环境变量加载状态
在代码中添加打印语句,确认环境变量是否成功加载:
print("API_TOKEN:", API_TOKEN) print("CLIENT_ID:", CLIENT_ID) print("CLIENT_SECRET:", CLIENT_SECRET)
若输出为None,说明.env文件路径错误或格式有误(需确保文件与脚本同目录,键值对为KEY=VALUE格式,无多余空格)。
5. 确认端点URL正确性
核对官方文档,确认/public/v2/me是当前可用的端点路径,部分API版本更新可能导致路径变更。
修正后示例代码
from flask import Flask, request, jsonify import os import requests from dotenv import load_dotenv API_HOST = "api.rightsignature.com" load_dotenv() # 统一使用大写键名匹配.env文件格式 API_TOKEN = os.environ.get("API_TOKEN") CLIENT_ID = os.environ.get("CLIENT_ID") CLIENT_SECRET = os.environ.get("CLIENT_SECRET") # 调试打印,确认凭证加载状态 print("Loaded credentials:") print(f"API_TOKEN: {API_TOKEN}") print(f"CLIENT_ID: {CLIENT_ID}") print(f"CLIENT_SECRET: {CLIENT_SECRET}") # 采用驼峰式请求头命名 headers = { "Private-API-Key": API_TOKEN, "Client-ID": CLIENT_ID, "Client-Secret": CLIENT_SECRET } url = f"https://{API_HOST}/public/v2/me" response = requests.get(url, headers=headers) print("Response status code:", response.status_code) print("Response text:", response.text)
内容的提问来源于stack exchange,提问作者jkcom
相关产品推荐
相关产品推荐

