寻求可API调用的RS256格式JWT编码器以实现DocuSign集成
可行解决方案
方案1:Make.com + 云函数(AWS Lambda/Google Cloud Function)
适合熟悉Python的场景,云函数可稳定处理批量POST请求,且能和Make无缝集成。
步骤1:部署Python云函数
以AWS Lambda为例:
- 创建Lambda函数,选择Python 3.10+运行时。
- 在函数代码中粘贴以下脚本:
import jwt import time from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/generate-jwt', methods=['POST']) def generate_jwt(): data = request.get_json() # 从请求体获取参数 integration_key = data.get('iss') user_id = data.get('sub') private_key = data.get('private_key') aud = data.get('aud', 'account-d.docusign.com') # 构造JWT Header和Payload header = {"alg": "RS256", "typ": "JWT"} payload = { "iss": integration_key, "sub": user_id, "aud": aud, "iat": int(time.time()), "exp": int(time.time()) + 6000, "scope": "signature impersonation" } # 生成JWT try: token = jwt.encode(payload, private_key, algorithm="RS256", headers=header) return jsonify({"jwt_token": token}) except Exception as e: return jsonify({"error": str(e)}), 400 # Lambda适配层 def lambda_handler(event, context): from werkzeug.wrappers import Request, Response request = Request(event) with app.request_context(request.environ): response = app.full_dispatch_request() return Response(response.get_data(), status=response.status_code, headers=dict(response.headers)).get_wsgi_response()
- 在Lambda的层中添加
PyJWT和cryptography依赖(或直接打包包含依赖的代码包部署)。 - 配置Lambda触发器为API Gateway,开启POST方法,获取可访问的API URL。
步骤2:Make.com中调用云函数
- 在Make场景中添加「HTTP」模块,选择「Make a request」。
- 设置请求方法为POST,填入API Gateway的URL。
- 请求体选择「Raw」,格式为JSON,传入参数:
{ "iss": "<你的集成密钥>", "sub": "<用户ID>", "private_key": "<你的RSA私钥(换行转义为\\n)>", "aud": "account-d.docusign.com" }
- 注意:私钥请用Make的加密字段存储,避免明文泄露。
方案2:直接在Make.com中用Node.js代码生成JWT
无需外部服务,直接利用Make的「Run JavaScript」模块和jsonwebtoken库实现。
步骤:
- 在Make场景中添加「Run JavaScript」模块。
- 输入以下代码,配置输入参数:
const jwt = require('jsonwebtoken'); // 从Make输入变量获取参数 const iss = inputData.integration_key; const sub = inputData.user_id; const privateKey = inputData.private_key.replace(/\\n/g, '\n'); // 处理转义换行符 const aud = inputData.aud || 'account-d.docusign.com'; const payload = { iss: iss, sub: sub, aud: aud, iat: Math.floor(Date.now() / 1000), exp: Math.floor(Date.now() / 1000) + 6000, scope: 'signature impersonation' }; const token = jwt.sign(payload, privateKey, { algorithm: 'RS256', header: { alg: 'RS256', typ: 'JWT' } }); return { jwt_token: token };
- 在模块「Input」标签中添加输入字段:
integration_key、user_id、private_key(可选aud),绑定对应变量。 - 运行模块即可得到JWT,后续直接用于DocuSign访问令牌请求。
方案3:Heroku托管Flask API
若偏好Python且需更灵活部署,可托管Flask API:
步骤:
- 创建项目文件:
app.py(内容同方案1的Flask代码)requirements.txt:
Flask==2.3.3 PyJWT==2.8.0 cryptography==41.0.5 gunicorn==21.2.0
Procfile:
web: gunicorn app:app
- 部署到Heroku:
- 用Heroku CLI登录,创建应用并推送代码。
- 部署完成后获取应用URL,如
https://your-app-name.herokuapp.com/generate-jwt。
- 在Zapier或Make中通过POST请求调用该URL,传入参数生成JWT。
内容的提问来源于stack exchange,提问作者Joshua Mentrup
相关产品推荐
相关产品推荐

