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

Python中DocuSign JWT授权后调用oauth/userinfo接口失败求助

解决DocuSign JWT Grant获取用户信息失败的问题

咱们一步步拆解你遇到的问题,逐个解决:

1. 最核心的错误:JWT Token请求参数误用

你调用request_jwt_user_token时,第二个参数传的是DOCUSIGN_ACCOUNT_ID,但这个方法的第二个参数要求的是用户ID(User ID),而非账户ID!这直接导致你获取到的token类型是Application(应用级令牌),而不是用户级的Bearer令牌——/oauth/userinfo接口必须使用用户级令牌才能访问,这就是你拿到内部服务器错误的根本原因。

你需要登录DocuSign开发者控制台,找到对应用户的ID(在用户详情页面可以获取),替换掉参数里的DOCUSIGN_ACCOUNT_ID。修正后的代码片段:

client.request_jwt_user_token(
    DOCUSIGN_CLIENT_ID,
    DOCUSIGN_USER_ID,  # 这里改成用户ID,不是账户ID!
    DOCUSIGN_AUTH_SERVER,
    DOCUSIGN_PRIVATE_KEY,
    DOCUSIGN_EXPIRE_TIME
)

2. curl命令的语法错误

你的curl命令里,URL和--header选项之间没有空格,导致curl解析URL出错:

# 错误写法(URL与--header连在一起)
curl --request GET https://account-d.docusign.com/oauth/userinfo--header "Authorization: Bearer ..."

修正后(添加空格,用换行符优化可读性):

curl --request GET https://account-d.docusign.com/oauth/userinfo \
  --header "Authorization: Bearer eyJ0eXAiOiJNVCIsImFsZyI6IlJTMjU2Iiwia2lkIjoiNjgxODVmZjEtNGU1MS00Y2U5LWFmMWMtNjg5ODEyMjAzMzE3In0.AQoAAAABAAUABwAAYWSFlJrXSAgAAMko55ya10gCAP-ftnA70YROvfpqFSh7j7kVAAEAAAAYAAEAAAAFAAAADQAkAAAAZjczYjYxMmMtOGI3Ny00YjRjLWFkZTQtZTI0ZWEyYjY4MTEwIgAkAAAAZjczYjYxMmMtOGI3Ny00YjRjLWFkZTQtZTI0ZWEyYjY4MTEwEgABAAAABgAAAGp3dF9iciMAJAAAAGY3M2I2MTJjLThiNzctNGI0Yy1hZGU0LWUyNGVhMmI2ODExMA.YHFoD2mQbwh8rdiPi8swg9kO9srlDyJcpqUo8XI5tdZki2I_Nla-qb9VaD4gAy8tSXVSY7unRjfClFDAqC8Ur73caHuZo7tN5tIKmXi6C3VzPWPGFJtsceKNEGMqwznw6OBVuPQG0IGlRjXK37Ur1nILLUWKb7w6O5Uz6y0e5uR8sxzZWh1adm2zHqd6khiQuAFB9vG2sS3jaudtck1qV6HRB_kARvUie1zglvHydc42Nc_o5GtIm3sGrqW7rio3YpHVX39nTKM-28kjOvPSNwzXp3IlZtaxuB6EdexrECH19nIaNbCe29LrdpzreRMyjEwwM309bOaKJ1KV82NbTQ"

3. Python代码里的其他细节问题

状态码判断逻辑错误

你在get_account_info里的错误状态码判断逻辑完全颠倒了:

# 错误逻辑:200 > response[1] > 300 永远不会成立
if len(response) > 1 and 200 > response[1] > 300:

改成判断状态码大于等于300才抛出异常:

if len(response) > 1 and response[1] >= 300:
    raise Exception(f"can not get user info: {response[1]}")

Python3语法兼容问题

print account是Python2的写法,Python3需要改成print(account)。

未定义变量问题

代码里的target_account_id没有定义,你需要确保这个变量已经被正确赋值(或者替换成你的目标账户ID变量)。

4. 验证修正后的流程

  1. 替换JWT请求的用户ID参数,重新获取token,此时token的token_type应该是Bearer
  2. 用修正后的curl命令测试/oauth/userinfo,应该能正常返回用户和账户信息
  3. 修正代码里的其他问题后,重新运行Python代码,就能成功获取到account信息了

内容的提问来源于stack exchange,提问作者Alejandro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 07:42:42