在控制台应用程序上下文中获得 DocuSign 的同意

Getting Consent from DocuSign in a Console App context

我正在努力从 .net 控制台应用程序上下文中获取访问令牌。我得到了它们并且它们有效,但它们过期太快了。

我检查了 Whosebug 中的其他两个线程,在两个答案中都指出,一旦您获得每个 IK 和每个用户的同意,您就不必再这样做了。但是,一旦我从 return_url 获取承载令牌并在获得承载几分钟后使用它来请求访问令牌,我就会收到“error_description:[=25”的响应=]".

所以我从浏览器手动获取承载以便在我的控制台应用程序中将其设置为参数(再次手动)并且承载到期持续时间只有几分钟不匹配“只需要一次同意,曾经,根据特定的集成和用户”。 我看到 docusign 使用 cookies' values/expiration 并且可能可以反向工程对 account-d.docusign 的 GET 调用以从控制台应用程序上下文获取承载,但这不是我对 API 提供商。

作为参考,我使用以下 URL 从浏览器手动获取承载: https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature&client_id=d69848a8-2a93-4d03-ab40-bcabda8a7e8f&redirect_uri=https://www.docusign.com 但如上所述,它确实会在几分钟后过期以获得上述 error_description 提前致谢!

响应中的令牌仅持续约 2 分钟。确实同意只需要一次,但你的问题不是同意。

响应类型 = code 是授权码授权流程。

但是对于将应用程序的实现下载到用户计算机的控制台应用程序,必须使用隐式授权流程。

这是因为授权码授予流程包括第二个 API 调用,从应用程序到 OAuth 服务提供商。第二次调用用于交换访问令牌的授权代码。第二次调用需要一个秘密值,但在下载到用户计算机的应用程序中没有保证保密的方法。

隐式授权流立即 return 访问您的应用程序的令牌,用于调用 API。

通过控制台应用程序使用隐式授权

步骤如下。我还在 Electron React apps post.

中讨论了这个用例

关键是使用Private-Use URI Scheme Redirection来处理身份验证并接收生成的访问令牌。参见 RFC 8252 §7.1

  1. 您的应用程序向操作系统 (windows) 注册了一个 http 私有方案,例如 com.example.name_of_my_app。这样,任何 URL 如 com.example.name_of_my_app://app 将被定向到您的应用程序进行处理。
  2. 配置您的 DocuSign 客户端 ID(集成密钥)以启用隐式授权并将 com.example.name_of_my_app://app 用作 return URL。不需要秘密。

当用户想要通过您的应用使用 DocuSign 进行身份验证时:

  1. 您的应用通过“打开”URL
  2. 启动与 DocuSign OAuth 服务提供商的隐式授权流程
https://account-d.docusign.com/oauth/auth?response_type=token&
    scope=signature&client_id=xxxx-xxxx&
    redirect_uri=com.example.name_of_my_app://app
  1. Windows 应该打开默认浏览器到 URL。结果将是来自 DocuSign 的身份验证页面。您的应用不应打开网络视图或类似视图。操作系统的浏览器应自动激活。

  2. 身份验证完成后,如果需要,将请求同意。

  3. 接下来,DocuSign 将通过重定向到 redirect_uri 来响应浏览器。这将触发您的应用程序并为您的应用程序提供 API 调用 DocuSign 所需的访问令牌。

  4. 对于某些操作系统,您的应用可以关闭因 URL 打开而创建的浏览器 window。

有关详细信息,请参阅 blog post

已添加

正如 Ben 所说,您的具体问题是您在授权码授予流程的第一步中收到的授权码仅持续一分钟左右。在此期间,您将其交换为访问令牌(持续 8 小时)。但正如我上面所说,您不应该使用授权码授权流程,您应该使用隐式授权流程。