十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Automatisch 集成 Ghost:Admin API 连接配置指南与认证实现原理

Automatisch 集成 Ghost:Admin API 连接配置指南与认证实现原理 Automatisch 集成 GhostAdmin API 连接配置指南与认证实现原理【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatischAutomatisch 内置了 Ghost 应用连接器只需在 Ghost Admin 后台创建自定义集成并获取 Admin API Key即可在 Automatisch 中建立 Ghost 连接并让工作流Flow订阅 Ghost 的post.published事件。本文将完整演示从 Ghost Admin 创建 API Key 到在 Automatisch 中提交连接的每一个步骤并结合本仓库中 Ghost 应用的源码认证字段定义、JWT 签名、请求地址拼接、凭据校验等讲清连接背后的实现原理帮助你在配置失败时也能快速定位问题。一、连接前需要准备什么Ghost 连接的建立依赖两项信息对应 Automatisch 连接表单中的两个必填字段定义见 认证字段源码字段 Key界面标签类型是否必填含义instanceUrlInstance URLstring是你的 Ghost 站点地址如https://my-blog.example.comapiKeyAdmin API Keystring是Ghost Admin 后台创建自定义集成后生成的 Admin API Key从源码看这两个字段均为普通字符串类型且必填required: true不支持只读回填也没有默认值。其中 Admin API Key 采用 Ghost 官方的标准格式即id:secret两部分用冒号分隔的复合密钥。二、在 Ghost Admin 中创建自定义集成Automatisch 官方文档给出的步骤非常简洁完整操作流程如下登录你的 Ghost 站点进入Ghost Admin管理后台。点击左侧菜单中的Integrations集成按钮进入集成管理页面。点击Add custom integration添加自定义集成按钮按提示为集成命名后创建。创建成功后页面会展示该集成专属的Admin API Key形如xxxxxxxx:yyyyyyyy冒号前是 Key ID冒号后是 Secret。复制该Admin API Key稍后填入 Automatisch 的Admin API Key字段。说明Ghost 的 Admin API Key 是id:secret形式的复合密钥其 Secret 部分是十六进制编码内容。Automatisch 的连接实现正是按这个格式进行拆分与签名的具体见下文“认证实现原理”一节。三、在 Automatisch 中创建 Ghost 连接拿到 Admin API Key 后回到 Automatisch 界面打开 Automatisch进入Connections连接页面选择 Ghost 应用进入新增连接表单。将复制的 Ghost Admin API Key 粘贴到Admin API Key字段。在Instance URL字段中填写你的 Ghost 站点 API 地址例如https://my-blog.example.com。点击Submit提交按钮。Automatisch 会立即向你的 Ghost 实例发起一次校验请求校验通过后连接即创建成功。提交成功后这条 Ghost 连接就可以在任意工作流的触发器和动作中被选用连接中的凭据instanceUrl与apiKey会作为$.auth.data注入到请求上下文中供所有 HTTP 调用使用。四、连接背后的认证实现原理Ghost 连接虽然表单简单但底层认证逻辑值得展开。整个请求链路由 Ghost 应用定义 中的两个beforeRequest钩子组成setBaseUrl与addAuthHeader它们会在每次对 Ghost API 发起请求前按顺序执行。1. 请求地址拼接setBaseUrlset-base-url.js 负责将连接表单中的instanceUrl拼装为 Ghost Admin API 的完整基础地址const setBaseUrl ($, requestConfig) { const instanceUrl $.auth.data.instanceUrl; if (instanceUrl) { requestConfig.baseURL ${instanceUrl}/ghost/api; } return requestConfig; };也就是说后续所有请求如/admin/site/、/admin/webhooks/都会自动落在${instanceUrl}/ghost/api/admin/...这个路径下。因此Instance URL 字段务必填写 Ghost 站点的根地址协议 域名不要手动附加/ghost或/api等路径后缀否则拼接出的 URL 会重复或错误。2. Admin API Key 的 JWT 签名addAuthHeaderadd-auth-header.js 是认证的核心实现它演示了 Ghost Admin API 的标准鉴权方式——用 Admin API Key 生成短期有效的 JWT并放入请求头的Authorization字段import jwt from jsonwebtoken; const addAuthHeader ($, requestConfig) { const key $.auth.data?.apiKey; if (key) { const [id, secret] key.split(:); const token jwt.sign({}, Buffer.from(secret, hex), { keyid: id, algorithm: HS256, expiresIn: 1h, audience: /admin/, }); requestConfig.headers.Authorization Ghost ${token}; } return requestConfig; };要点解读密钥拆分key.split(:)将id:secret拆成 Key ID 与 Secret 两部分Secret 解码Buffer.from(secret, hex)说明 Ghost 返回的 Secret 是十六进制字符串需要先解码为原始字节再参与签名签名算法使用HS256HMAC-SHA256JWT 的keyid即 Admin API Key 的 ID 部分有效期与受众JWT 有效期为1haudience固定为/admin/与 Ghost Admin API 的校验规则保持一致请求头格式Authorization: Ghost token这是 Ghost Admin API 官方要求的认证头写法。这段代码同时解释了“为什么我的连接总是认证失败”的常见原因粘贴 Key 时包含多余空格、Secret 部分被截断、或 Instance URL 拼错都会导致verifyCredentials校验阶段直接报错。3. 提交时的凭据校验verifyCredentials点击 Submit 后Automatisch 会调用 verify-credentials.js 做真实性的连通性验证const verifyCredentials async ($) { const site await $.http.get(/admin/site/); const screenName [site.data.site.title, site.data.site.url] .filter(Boolean) .join( ); await $.auth.set({ screenName }); await $.http.get(/admin/pages/); };它依次做了两件事先请求GET /admin/site/从响应中取出站点title与url拼接成形如我的博客 https://my-blog.example.com的screenName作为该连接在 Automatisch 连接列表中的展示名称再请求GET /admin/pages/再次确认 Admin API Key 对 Admin 资源具备真实访问权限。两步都通过连接才算创建成功。此外Automatisch 在每次实际运行工作流前还会通过 is-still-verified.js 重新执行一次verifyCredentials用于检测 Key 是否已被吊销或失效从而保证连接长期可用。五、连接成功后的典型用法订阅文章发布事件建立连接后Ghost 应用目前提供 1 个触发器New post published详见 触发器文档描述为“发布新文章时触发”。在流程编辑器中选择该触发器并绑定上述 Ghost 连接即可使用。从 触发器实现 可以看到它是一个webhook类型的触发器其工作方式为注册钩子工作流启用时向 Ghost 发送POST /admin/webhooks/请求注册event: post.published事件并把 Automatisch 生成的$.webhookUrl作为回调地址同时以Flow ID: id命名该 Webhook便于在 Ghost Admin 后台辨认接收事件当 Ghost 检测到文章发布会回调 Automatisch触发器的run函数把请求体$.request.body作为原始数据raw推入流程并生成一个 UUID 作为内部去重 ID注销钩子工作流被禁用或删除时通过DELETE /admin/webhooks/id/移除远程 Webhook。这意味着你只需一次连接就能让“Ghost 文章发布”成为自动化流程的起点例如发布后自动通知团队、同步到外部系统等均可在流程编辑器中继续编排。六、常见问题与排查建议Submit 时报认证失败优先核对 Admin API Key 是否完整复制含冒号及冒号后的完整 Secret、前后是否有空格再确认 Instance URL 是站点根地址如https://example.com而非带/ghost/api的路径。连接已成功但触发器收不到事件确认 Ghost 站点对外网络可达且 Automatisch 的 Webhook 回调地址$.webhookUrl能被 Ghost 服务器访问同时可在 Ghost Admin 的 Integrations 页面查看该集成下注册的 Webhook 是否处于激活状态。Key 被吊销后如何恢复重新回到 Ghost Admin 的对应自定义集成中查看或重建 Admin API Key然后在 Automatisch 中编辑该连接更新 Admin API Key 字段后重新提交即可。七、参考与延伸阅读官方连接文档packages/docs/pages/apps/ghost/connection.md触发器说明packages/docs/pages/apps/ghost/triggers.md应用注册与 beforeRequest 钩子packages/backend/src/apps/ghost/index.js认证字段定义packages/backend/src/apps/ghost/auth/index.js凭据校验实现packages/backend/src/apps/ghost/auth/verify-credentials.jsJWT 签名实现packages/backend/src/apps/ghost/common/add-auth-header.js基础地址拼接实现packages/backend/src/apps/ghost/common/set-base-url.js新文章发布触发器实现packages/backend/src/apps/ghost/triggers/new-post-published/index.js【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表