Python中文
首页
教程
问答
标签
搜索
登录
注册
在Python中的DocuSign中获取令牌
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在一个项目中工作,我正在尝试获取访问令牌以使用docusignapi,但是获取oauth userinfo的调用不起作用</p> <ul> <li>身份验证类型:<a href="https://developers.docusign.com/esign-rest-api/guides/authentication/oauth2-jsonwebtoken" rel="nofollow noreferrer">JWT Grant</a></li> <li>Python SDK:<a href="https://github.com/docusign/docusign-python-client" rel="nofollow noreferrer">docusign-python-client</a></li> </ul> <p>守则:</p> <pre class="lang-py prettyprint-override"><code>class BaseDocusign: api_client = None _token_received = False expiresTimestamp = 0 account = None def __init__(self): BaseDocusign.api_client = ApiClient() def token_is_expired(self): current_time = int(round(time.time())) return (current_time + DOCUSIGN_EXPIRE_TIME - 10) > BaseDocusign.expiresTimestamp def check_token(self): if not BaseDocusign._token_received or self.token_is_expired(): self.update_token() def update_token(self): client = BaseDocusign.api_client client.request_jwt_user_token( DOCUSIGN_CLIENT_ID, DOCUSIGN_ACCOUNT_ID, DOCUSIGN_AUTH_SERVER, DOCUSIGN_PRIVATE_KEY, DOCUSIGN_EXPIRE_TIME ) if BaseDocusign.account is None: account = self.get_account_info(client) print account BaseDocusign._token_received = True BaseDocusign.expiresTimestamp = (int(round(time.time())) + DOCUSIGN_EXPIRE_TIME) def get_account_info(self, client): client.host = DOCUSIGN_AUTH_SERVER response = client.call_api("/oauth/userinfo", "GET", response_type="object") if len(response) > 1 and 200 > response[1] > 300: raise Exception("can not get user info: %d".format(response[1])) accounts = response[0]['accounts'] target = target_account_id if target is None or target == "FALSE": # Look for default for acct in accounts: if acct['is_default']: return acct # Look for specific account for acct in accounts: if acct['account_id'] == target: return acct raise Exception("User does not have access to account {target}\n") </code></pre> <p>当我运行它时:</p> <pre class="lang-py prettyprint-override"><code>a = BaseDocusign() a.update_token() </code></pre> <p>将生成访问令牌:</p> <pre class="lang-js prettyprint-override"><code>{"access_token":"eyJ0eXAiOiJNVCIsImFsZyI6IlJTMjU2Iiwia2lkIjoiNjgxODVmZjEtNGU1MS00Y2U5LWFmMWMtNjg5ODEyMjAzMzE3In0.AQkAAAABAAsADQAkAAAAZjczYjYxMmMtOGI3Ny00YjRjLWFkZTQtZTI0ZWEyYjY4MTEwIgAkAAAAZjczYjYxMmMtOGI3Ny00YjRjLWFkZTQtZTI0ZWEyYjY4MTEwBwAAq89LFJXXSAgAAOvyWVeV10gLAB8AAABodHRwczovL2FjY291bnQtZC5kb2N1c2lnbi5jb20vDAAkAAAAZjczYjYxMmMtOGI3Ny00YjRjLWFkZTQtZTI0ZWEyYjY4MTEwGAABAAAABQAAABIAAQAAAAYAAABqd3RfYnI.f_XW63iL5ABts-gq48ciWKQnaYyNiIEG9rC_CpnyWo0Hzf-B_G3hIRUWJzD1Yiyyy4pKm_8-zoalsoqANcMeXsjwBTCMlXIhc216ZWa6nHR6CheRbfTHM6bJ1LKwRdmnpwLywu_qiqrEwEOlZkwH_GzSSP9piUtpCmhgdZY1GFnG2u9JU_3jd8nKN87PE_cn2sjD3fNMRHQXjnPeHPyBZpC171TyuEvQFKCbV5QOwiVXmZbE9Aa_unC-xXvvJ2cA3daVaUBHoasXUxo5CZDNb9aDxtQkn5GCgQL7JChL7XAfrgXAQMOb-rEzocBpPJKHl6chBNiFcl-gfFWw2naomA","token_type":"Application","expires_in":28800} </code></pre> <p>但当尝试获取帐户信息时,呼叫失败:</p> <pre class="lang-js prettyprint-override"><code>{"error":"internal_server_error","reference_id":"f20e360c-185d-463e-9f0b-ce95f38fe711"} </code></pre> <p>为此,我调用<code>get_account_info</code>函数,它调用端点<code>oauth/userinfo</code>,但调用失败</p> <pre class="lang-py prettyprint-override"><code>response = client.call_api("/oauth/userinfo", "GET", response_type="object") # Response: {"error":"internal_server_error","reference_id":"f20e360c-185d-463e-9f0b-ce95f38fe711"} </code></pre> <p>要完成这个<a href="https://developers.docusign.com/esign-rest-api/code-examples/quickstart-request-signature-email" rel="nofollow noreferrer">example</a>,我需要变量<code>account_id</code>,根据这个例子,<code>get_account_info</code>函数得到它</p> <p>我还尝试按照<a href="https://developers.docusign.com/esign-rest-api/guides/authentication/oauth2-jsonwebtoken" rel="nofollow noreferrer">web</a>所述(步骤4)获取用户信息,答案是:</p> <pre class="lang-sh prettyprint-override"><code>curl --request GET https://account-d.docusign.com/oauth/userinfo--header "Authorization: Bearer eyJ0eXAiOiJNVCIsImFsZyI6IlJTMjU2Iiwia2lkIjoiNjgxODVmZjEtNGU1MS00Y2U5LWFmMWMtNjg5ODEyMjAzMzE3In0.AQoAAAABAAUABwAAYWSFlJrXSAgAAMko55ya10gCAP-ftnA70YROvfpqFSh7j7kVAAEAAAAYAAEAAAAFAAAADQAkAAAAZjczYjYxMmMtOGI3Ny00YjRjLWFkZTQtZTI0ZWEyYjY4MTEwIgAkAAAAZjczYjYxMmMtOGI3Ny00YjRjLWFkZTQtZTI0ZWEyYjY4MTEwEgABAAAABgAAAGp3dF9iciMAJAAAAGY3M2I2MTJjLThiNzctNGI0Yy1hZGU0LWUyNGVhMmI2ODExMA.YHFoD2mQbwh8rdiPi8swg9kO9srlDyJcpqUo8XI5tdZki2I_Nla-qb9VaD4gAy8tSXVSY7unRjfClFDAqC8Ur73caHuZo7tN5tIKmXi6C3VzPWPGFJtsceKNEGMqwznw6OBVuPQG0IGlRjXK37Ur1nILLUWKb7w6O5Uz6y0e5uR8sxzZWh1adm2zHqd6khiQuAFB9vG2sS3jaudtck1qV6HRB_kARvUie1zglvHydc42Nc_o5GtIm3sGrqW7rio3YpHVX39nTKM-28kjOvPSNwzXp3IlZtaxuB6EdexrECH19nIaNbCe29LrdpzreRMyjEwwM309bOaKJ1KV82NbTQ" # Response <html><head><title>Object moved</title></head><body> <h2>Object moved to <a href="https://account-d.docusign.com/">here</a>.</h2> </body></html> curl: (3) URL using bad/illegal format or missing URL </code></pre> <p>谢谢大家:)</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>使用过期令牌也可能导致此错误(使用刷新端点获取新令牌)</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
文本导入时标题行中的特殊字符
8 回答
文本小部件:在没有输入时更新并在循环后保持空闲
1 回答
文本小部件tkin
4 回答
文本小部件tkinter中的标签更改或文本外观更改是否有撤消功能?
10 回答
文本小部件tkinter复制图像选项
4 回答
文本小部件上的Python Tkinter ttk滚动条未缩放
2 回答
文本小部件上的滚动条可能需要根据制表符ord显示前进行滚动
9 回答
文本小部件不显示lis中的内容
1 回答
文本小部件不显示Unicode字符
4 回答
文本小部件中写入的行间距
5 回答
文本小部件中的文本作为变量
6 回答
文本小部件中的滚动条仅显示在底部
5 回答
文本小部件中的选项卡键空间计数
2 回答
文本小部件作为Lis
10 回答
文本小部件在主框架中扩展列宽
8 回答
文本小部件未使用删除功能清除
9 回答
文本小部件滚动动画(Tkinter、Python)
2 回答
文本居中。格式正确吗?
5 回答
文本差分算法
5 回答
文本已知时音频文件中的单词索引
6 回答