我正在为空字节 连接器创建DocuS传的电子签名Rest。
实现连接器的部分过程是编写一个从AuthBase扩展requests.auth类的身份验证例程。
问题是Docusign 不支持用于JWT授权的刷新令牌。根据docusign文档
JWT授予的访问令牌在一个小时后到期,并且不提供刷新令牌。在令牌过期后,您必须生成一个新的JWT并将其交换为一个新的访问令牌。 您可以重用大部分旧断言,只需修改IAT和EXP值并更新签名,然后提交更新的JWT以获得新的访问令牌。一般来说,使用JWT的应用程序应该在现有的访问令牌到期前15分钟获得一个新的访问令牌。
但是,请求文件的这一部分(链接到requests-authlib文档中的此页 )中的“后端应用程序流”中的所有示例似乎只允许包含刷新令牌的Auth2工作流。
我如何解决这个问题,以便每次刷新令牌过期时都会发出新请求(使用更新的IAT EXP和签名)?
发布于 2022-02-24 20:45:27
刷新令牌是OAuth授权代码授予流的一个特性。
授权代码授予流要求人对自己进行身份验证。结果是一个8小时访问令牌和一个30天刷新令牌。
若要获得新的访问令牌,请执行以下操作:
用于JWT授权流,没有人和刷新令牌。相反,应用程序只是重新运行JWT授权流,并接收一个新的1小时访问令牌。
当您重新执行JWT流时,创建一个新的JWT (更新的IAT、EXP等)。用您的私钥签名,并将其发送到DocuSign以获得新的访问令牌。
JWT操作足够便宜,每个模拟用户每小时执行一次。但是您必须缓存访问令牌和,而不是,为每个API调用重新执行JWT授权流.
Python身份验证库
大多数语言的大多数身份验证库都集中在授权代码授予流上,因为这是最常用的OAuth流。
但是,正如您已经指出的,您使用的是JWT流。这意味着您不能使用这些库。相反,你需要自己滚动。好消息是这并不难。这是我的伪代码:
Send_an_API_request(url, request_details, etc):
access_token = Get_access_token(user_id);
api_results = send_api_request(access_token, url, request_details, etc)
return api_results;
Get_access_token(user_id):
(access_token, expire_time) = database_lookup(user_id);
# if access_token is about to expire or we don't have one,
# create a new access_token and store it
if (
((current_time + 10minutes) > expire_time)
or
(access_token is null)
):
# Make a new JWT request
jwt = make_jwt(user_id);
signed_jwt = sign(jwt, private_key)
(access_token, expire_sec) = send_jwt_request(signed_jwt)
database_store (user_id, access_token, current_time + expire_sec)
return access_token已添加
回复:
我需要从AuthBase扩展requests.auth类
如果应用程序的体系结构要求您扩展AuthBase类,那么您将需要在AuthBase类中实现JWT授权流。
如果AuthBase类不允许您访问JWT授予流所需的数据,那么就需要将所需的数据填充到诸如“刷新令牌”这样的可用属性中。
https://stackoverflow.com/questions/71255162
复制相似问题