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. 验证修正后的流程
- 替换JWT请求的用户ID参数,重新获取token,此时token的
token_type应该是Bearer - 用修正后的curl命令测试
/oauth/userinfo,应该能正常返回用户和账户信息 - 修正代码里的其他问题后,重新运行Python代码,就能成功获取到account信息了
内容的提问来源于stack exchange,提问作者Alejandro
相关产品推荐
相关产品推荐

