Automatisch Cryptography 应用实战:在自动化工作流中生成 HMAC 与数字签名
【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch
Cryptography 是 Automatisch 内置的加密工具应用,无需连接任何外部服务即可在工作流中完成消息认证码(HMAC)与数字签名的生成。本文将基于该应用的动作定义文档与其在 backend 中的源码实现,逐一拆解两个内置动作的完整参数、取值约束与底层调用链,帮助你直接在自动化流程中落地 Webhook 签名校验、数据完整性校验等场景。
Cryptography:开箱即用的内置应用
在 Automatisch 中,Cryptography 是一个"内置(built-in)应用",其定位正如 connection 文档 所述:无需连接任何外部服务即可执行密码学操作。这一点在其应用定义中得到了直接印证——源码 packages/backend/src/apps/cryptography/index.js 将supportsConnections显式置为false,同时baseUrl与apiBaseUrl均为空字符串:
export default defineApp({ name: 'Cryptography', key: 'cryptography', iconUrl: '{BASE_URL}/apps/cryptography/assets/favicon.svg', authDocUrl: '{DOCS_URL}/apps/cryptography/connection', supportsConnections: false, baseUrl: '', apiBaseUrl: '', primaryColor: '#001F52', actions, });这意味着在流程编辑器中选择该应用时,不会出现"添加连接(Add Connection)"的步骤,参数全部为字符串输入,数据不经过任何第三方服务,所有计算都由 backend 运行时的 Node.js 内置node:crypto模块完成。
与大多数需要 OAuth 或 API Key 的集成应用(如 GitHub、Slack)不同,Cryptography 属于纯计算型应用。这使它非常适合在触发动作与外部 API 调用之间充当"签名器/哈希器"的中间步骤。
应用提供的两个动作
根据 actions 文档 的元数据清单,Cryptography 应用共提供两个动作:
| 动作名称 | 说明 |
|---|---|
| Create HMAC | 使用指定算法、密钥与消息生成基于哈希的消息认证码(HMAC) |
| Create Signature | 使用指定算法、私钥与消息生成数字签名 |
文档前端元数据(frontmatter)中的favicon与items字段会由 CustomListing.vue 组件渲染成动作列表页面,而动作的完整参数定义则位于 backend 的动作源码中,下面逐一展开。
动作一:Create HMAC(创建 HMAC)
HMAC(Hash-based Message Authentication Code)通过"密钥 + 哈希函数"对消息进行认证,常用于验证消息在传输过程中未被篡改,同时确认消息发送方持有共享密钥——例如在 Webhook 回调场景中对请求体签名进行校验。
参数定义
动作源码 packages/backend/src/apps/cryptography/actions/create-hmac/index.js 中定义了四个参数:
| 参数 | 类型 | 是否必填 | 默认值 | 可选项 | 说明 |
|---|---|---|---|---|---|
| Algorithm | dropdown | 是 | sha256 | SHA-256(sha256) | 用于 HMAC 生成的哈希函数 |
| Message | string | 是 | 无 | — | 待处理的输入消息,即要计算 HMAC 的原始内容 |
| Secret Key | string | 是 | 无 | — | 用于创建 HMAC 的共享密钥 |
| Output Encoding | dropdown | 是 | hex | base64/base64url/hex | HMAC 摘要的输出编码格式 |
底层实现
该动作在run阶段直接调用 Node.js 内置的crypto.createHmac,完整调用链如下(对应 create-hmac/index.js):
async run($) { const hash = createHmac($.step.parameters.algorithm, $.step.parameters.secretKey) .update($.step.parameters.message) .digest($.step.parameters.outputEncoding); $.setActionItem({ raw: { hash }, }); }其中:
algorithm:当前仅开放sha256,即 SHA-256 哈希;secretKey:作为 HMAC 的共享密钥输入;message:通过.update()注入待哈希内容;outputEncoding:决定.digest()返回的编码形式(见下文"输出编码"小节)。
计算完成后,结果通过$.setActionItem({ raw: { hash } })写入当前步骤的输出,后续步骤可通过变量引用hash字段。
动作二:Create Signature(创建数字签名)
数字签名基于非对称加密:用私钥对消息签名,接收方用公钥验签。它比 HMAC 多了一层"签名方不可抵赖"的语义,常见于需要向第三方服务证明请求确实由你发出的支付回调、开放平台回调等场景。
参数定义
动作源码 packages/backend/src/apps/cryptography/actions/create-rsa-sha256-signature/index.js 同样定义了四个参数:
| 参数 | 类型 | 是否必填 | 默认值 | 可选项 | 说明 |
|---|---|---|---|---|---|
| Algorithm | dropdown | 是 | RSA-SHA256 | RSA-SHA256 | 用于签名的哈希算法 |
| Message | string | 是 | 无 | — | 待签名的输入消息 |
| Private Key | string | 是 | 无 | — | PEM 格式的 RSA 私钥 |
| Output Encoding | dropdown | 是 | hex | base64/base64url/hex | 数字签名的输出编码格式 |
注意Private Key的输入要求:必须是PEM 格式的 RSA 私钥(即-----BEGIN PRIVATE KEY-----或-----BEGIN RSA PRIVATE KEY-----包裹的多行文本),这决定了该参数适合存入流程的受保护变量或机密管理能力中,而不是明文散落在流程配置里。
底层实现
该动作使用 Node.jscrypto.createSign完成签名,核心调用链如下(对应 create-rsa-sha256-signature/index.js):
async run($) { const signer = crypto.createSign($.step.parameters.algorithm); signer.update($.step.parameters.message); signer.end(); const signature = signer.sign($.step.parameters.privateKey, $.step.parameters.outputEncoding); $.setActionItem({ raw: { signature }, }); }流程为:创建签名器 → 写入消息 → 结束输入 → 使用 PEM 私钥签名并输出指定编码的结果。最终通过$.setActionItem({ raw: { signature } })暴露给后续步骤。
参数变量的灵活引用
两个动作的所有参数都标记了variables: true(见 create-hmac/index.js、create-rsa-sha256-signature/index.js),这意味着:
- Message可以引用上游步骤的输出(例如 Webhook 触发器收到的原始请求体、表单提交的字段值);
- Secret Key / Private Key可以使用 Automatisch 的变量能力动态注入,避免把敏感信息硬编码进流程;
- 两个动作的输出(
hash/signature)同样可以通过变量被下游动作(如 HTTP 请求的 Header、请求体字段)引用,构成"加密 → 发送"的完整链路。
三种输出编码的选择
两个动作都提供base64、base64url、hex三种输出编码(默认hex),它们影响最终字符串的形态与适用场景:
| 编码 | 形态示例 | 适用场景 |
|---|---|---|
hex | a3f2...(0-9a-f,每位 4 bit) | 通用、最易阅读与日志记录,默认选项 |
base64 | o/LK...(含+、/、=) | 常见于 HTTP Header 或 JSON 字段传输 |
base64url | o_LK...(+→-,/→_,无=) | 适用于 URL、Query 参数等对字符集敏感的位置 |
选型建议:如果签名结果要放进 URL 或 Header 中传递,优先base64url以避免特殊字符转义;如果结果仅用于本地比对或入库,hex更直观;对接第三方平台时则需以对方文档要求的编码为准。
在流程中的典型组合
结合 Automatisch 的流程模型,一个典型的"HMAC 签名后推送"场景可以这样编排:
- Webhook 触发器接收外部请求,拿到原始报文(作为 Message 输入);
- Cryptography → Create HMAC使用共享密钥计算
hash,输出编码选base64; - HTTP Request 动作将上一步输出的
hash填入自定义 Header(如X-Signature),把报文转发给下游服务,由下游使用同一共享密钥验签。
源码速查
- 应用定义:packages/backend/src/apps/cryptography/index.js
- 动作清单:packages/backend/src/apps/cryptography/actions/index.js
- Create HMAC 实现:packages/backend/src/apps/cryptography/actions/create-hmac/index.js
- Create Signature 实现:packages/backend/src/apps/cryptography/actions/create-rsa-sha256-signature/index.js
- 动作定义规范:
defineAction仅作为类型标识(见 packages/backend/src/helpers/define-action.js),动作的可执行逻辑全部位于各动作的run方法中
从源码结构看,Cryptography 应用刻意保持"零依赖外部服务、参数即输入、输出即单值对象"的极简设计,是 Automatisch 内置应用中典型的纯计算型工具,适合作为任何流程中的签名与校验中间步骤。
【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考