You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rails中无需浏览器授权码生成DocuSign Access Token

Rails集成DocuSign无浏览器获取Access Token方案

针对你的需求,推荐使用DocuSign JWT Grant授权流程,这是服务端到服务端的无交互授权方式,仅需首次手动完成一次授权确认,后续即可自动获取Access Token。

前提条件

  • 已获取DocuSign集成密钥(Client ID)及对应的RSA私钥(在DocuSign开发者控制台生成)
  • 已获取需要 impersonate 的DocuSign用户ID(userId)
  • 已在集成密钥配置中添加该用户的 impersonation 权限
  • 已在集成密钥中设置有效的重定向URI(仅首次授权时使用)

实现步骤

1. 安装依赖

在Rails项目的Gemfile中添加依赖:

gem 'docusign_esign'
gem 'jwt'
gem 'dotenv-rails' # 用于管理环境变量,可选但推荐

执行bundle install完成安装。

2. 配置环境变量

在.env文件中添加敏感配置(避免硬编码):

DOCUSIGN_CLIENT_ID=你的集成密钥ID
DOCUSIGN_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
你的RSA私钥内容
-----END RSA PRIVATE KEY-----"
DOCUSIGN_USER_ID=需要 impersonate 的用户ID
DOCUSIGN_OAUTH_BASE_PATH=https://account-d.docusign.com # 开发环境,生产环境用account.docusign.com
DOCUSIGN_BASE_PATH=https://demo.docusign.net/restapi # 开发环境,生产环境用www.docusign.net/restapi

3. 编写服务类实现JWT授权

创建app/services/docusign_service.rb:

require 'docusign_esign'
require 'jwt'
require 'openssl'

class DocuSignService
  def initialize
    @client_id = ENV['DOCUSIGN_CLIENT_ID']
    @private_key = ENV['DOCUSIGN_PRIVATE_KEY']
    @user_id = ENV['DOCUSIGN_USER_ID']
    @oauth_base_path = ENV['DOCUSIGN_OAUTH_BASE_PATH']
  end

  # 获取Access Token
  def fetch_access_token
    # 构造JWT Payload
    payload = {
      iss: @client_id,
      sub: @user_id,
      aud: @oauth_base_path.split('//').last, # 提取aud值(如account-d.docusign.com)
      exp: Time.now.to_i + 3600, # Token有效期设为1小时
      scope: 'signature impersonation'
    }

    # 生成签名后的JWT Token
    rsa_key = OpenSSL::PKey::RSA.new(@private_key)
    jwt_token = JWT.encode(payload, rsa_key, 'RS256')

    # 调用DocuSign OAuth接口获取Token
    oauth_api = DocuSign_eSign::OAuthApi.new
    response = oauth_api.oauth_token(
      { grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer', assertion: jwt_token },
      @oauth_base_path
    )

    response.access_token
  end

  # 刷新Access Token(可选,用Refresh Token续期)
  def refresh_access_token(refresh_token)
    oauth_api = DocuSign_eSign::OAuthApi.new
    response = oauth_api.oauth_token(
      { grant_type: 'refresh_token', refresh_token: refresh_token, client_id: @client_id },
      @oauth_base_path
    )

    { access_token: response.access_token, refresh_token: response.refresh_token }
  end
end

4. 首次授权确认(仅需一次)

生成授权链接(替换{{client_id}}和{{redirect_uri}}为你的配置):

https://account-d.docusign.com/oauth/auth?response_type=code&scope=signature%20impersonation&client_id={{client_id}}&redirect_uri={{redirect_uri}}

用需要impersonate的DocuSign账号访问该链接,完成授权确认后,后续即可通过JWT自动获取Token,无需再通过浏览器操作。

注意事项

  • JWT生成的Access Token有效期为1小时,可通过Refresh Token自动续期,避免频繁重新生成
  • 私钥需妥善保管,切勿提交到代码仓库
  • 生产环境需切换对应的DocuSign域名(将account-d.docusign.com改为account.docusign.com,demo.docusign.net改为www.docusign.net)

内容的提问来源于stack exchange,提问作者Vivek gautam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:30