无法使用DocuSign Python代码生成jwt令牌

时间:2020-03-11 05:57:52

标签: python-3.x curl jwt docusignapi

我将docusign用于数字签名,我必须在其中创建jwt令牌。为此,我一直在使用git repo https://github.com/docusign/docusign-python-client中的代码。

docusign版本3.1.0,python版本3.5和3.6在沙盒模式下。 得到以下错误 引发MaxRetryError(_pool,url,error或ResponseError(cause)) urllib3.exceptions.MaxRetryError:HTTPSConnectionPool(host ='https',端口= 443):url http://account-d.docusign.com/oauth/token超过了最大重试次数(由NewConnectionError(':导致无法建立新连接:[Errno -2] Name or服务未知”,))

我已使用以下url JSON Web令牌(JWT)Grant跟踪了curl请求

获得了应用程序令牌,并在传递身份验证的同时给了我401(401未经授权 )错误 邮递员

claim = {“ iss”:'4556e2f7-4a3d-41f9-a0c3-18535a28ab2a',“ aud”:'account-d.docusign.com',“ iat”:现在,“ exp”:稍后,“范围“:”“ .join(scopes)}令牌= jwt.encode(有效载荷=声明,密钥= pkey,算法='RS256')。decode(” utf-8“) 我使用上面的代码获取应用程序令牌,但是当我通过所有必需的参数时,得到了{“ error”:“ invalid_grant”,“ error_description”:“ no_valid_keys_or_signatures”},但是当我将jwt令牌粘贴到jwt.io中时,使用了我的public和privte密钥已签名验证。

我添加了屏幕快照的链接,这也可能有助于进一步了解问题。 https://ibb.co/2yKXNCW https://ibb.co/cFTk6R1 https://ibb.co/t3YMkr2

2 个答案:

答案 0 :(得分:0)

这是您必须确保的事情:

  1. 您具有正确配置的集成密钥(clientID)。

  2. 您具有RSA私钥。该密钥已被复制/粘贴到与您的配置文件完全相同的位置。必须保留新行

  3. 您的URL与环境匹配。意味着您将account-d和demo.docusign.net用于沙箱环境端点。

  4. 您需要userId,它是将被模拟的用户的GUid。该用户必须同意该应用程序。您必须确保您传递的是userId而不是accountId,并且它与您要使用的帐户相同。

如果您确认所有这些操作仍然出现错误-我会考虑使用我们的代码示例开始。我没有在您的问题中看到代码,但是我们的代码示例应该是一个很好的开始。

答案 1 :(得分:0)

这个概念是生成一个包含 3 个元素的密钥(标头 RS256 算法,包含申请日期和令牌有效性的有效载荷数据以及私钥和公钥。在站点 jwt.io 上,我们将把所有这些信息和站点将返回一个 Base64 密钥,我们可以进一步输入

打开 JWT.IO 站点 jwt.io

  1. 选择顶部的算法 RS256

对于第二个窗格:“有效载荷:数据”

https://admindemo.docusign.com/apps-and-keys

是:

应用程序的集成密钥(也称为客户端 ID)。

sub :要模拟的用户的用户 ID。 (授予权限的人必须拥有 DocuSign 用户帐户。) 提供的用户 ID 必须采用 GUID(而非电子邮件)格式。您可以使用 users.list 方法从用户的电子邮件中查找用户的 GUID。 注意:如果您还没有要代表的用户的用户 ID,您可以通过完成在请求授权代码步骤中开始的授权代码授予流程来获取它。

https://admindemo.docusign.com/apps-and-keys -> 应用和密钥 ->

aud :要使用的身份验证服务实例的 URI。 对于演示环境,请使用 account-d.docusign.com。 对于生产环境,请使用 account.docusign.com。

重要提示:请不要在 aud 值中包含 https://!

iat : JWT 发布的日期时间 以 Unix 纪元格式。创建 JWT 时必须包含 iat 值,通常设置为当前时间。

您可以使用以下链接将日期转换为 linux 纪元格式:https://www.epochconverter.com/

exp:JWT 断言到期的日期时间

Unix 纪元格式。默认为 iat 值的一小时,不能设置为更大的值。创建 JWT 时必须包含 exp 值。 使用纪元 https://www.epochconverter.com/

⚠ 请注意这个值不能太及时,在我们的例子中我们使用 14 年的有效期。

scope :要请求的范围。在我们的示例中,“签名模拟”。 所有范围均在以下站点 https://developers.docusign.com/platform/auth/reference/scopes/

上定义

{ "iss":"ea670856-0422-4d8e-99bd-80560d323639", "sub":"917c9fc5-d615-43bb-8a28-87e7ede3b8ac", "aud":"account-d.docusign.com", “iat”:1628496664, “exp”:1912493464, “范围”:“签名模拟” }

对于窗格“验证签名” https://admindemo.docusign.com/apps-and-keys -> 操作 -> 编辑

... -> 点击“生成 RSA”

选择公共并将其粘贴到该部分

对公钥进行相同的操作。如果一切正常,您必须在文档左侧有“签名验证”标签,见下图。

最后一步,您将获得用于声明使用 API 的密钥

去邮递员

  1. https://www.postman.com/use-cases/api-testing-automation/

  2. 登录(我用我的谷歌账户)

  3. 您必须填写以下值

  4. 选择“发布”

  5. 输入 API 值:https://account-d.docusign.com/oauth/token

  6. 点击“正文”部分

  7. 添加密钥“grant_type”

  8. 为键“grant_type”添加值“urn:ietf:params:oauth:grant-type:jwt-bearer”

  9. 添加“断言”键

  10. 在前面的步骤中添加来自站点 jwt 的 generate 值

  11. 最后点击发送以获得进一步调用所需的“access_token”。 [在此处输入图片说明][1]

相关问题