使用请求实现DocuSign身份验证

Implementing Docusign Authentication using Requests(使用请求实现DocuSign身份验证)
本文介绍了使用请求实现DocuSign身份验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为Docusign's E-signature Rest API创建Airbyteconnector。

实现连接器的过程的一部分是编写身份验证例程,该例程从requests.auth扩展AuthBase类。

问题是DocuSign不支持JWT授权的刷新令牌。根据docusign documentation:

JWT Grant授予的访问令牌将在一小时后过期,不提供刷新令牌。令牌过期后,您必须生成新的JWT并将其交换为新的访问令牌。

您可以重用大多数旧断言,只需修改IAT和EXP值并更新签名,然后提交更新的JWT以获得新的访问令牌。 通常,使用JWT的应用应该在现有访问令牌过期前大约15分钟获得新的访问令牌。

但是,requests documentation(它链接到requests-authlib文档中的this page)这一部分的后端应用程序流中的所有示例似乎只允许包括刷新令牌的Auth2工作流。

我如何解决此问题,以便每次刷新令牌过期时,都会发出新的请求(具有更新的IAT EXP和签名)?

推荐答案

刷新令牌是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

已添加

回复:

[我需要]从quests.auth扩展AuthBase类

如果应用程序的体系结构要求您扩展AuthBase类,则需要在AuthBase类中实现JWT授权流。

如果AuthBase类不允许您访问JWT授权流所需的数据,则黑客可以将所需数据填充到可用的属性中,例如刷新标记。";

这篇关于使用请求实现DocuSign身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)