在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
相关产品推荐
相关产品推荐

