dsh-plugin-cloudflare:在 DSH 裏用 OAuth 連上 Cloudflare

前言

在 DSH(DeepSeek Harness)裏讓模型查賬號、Zone 或 DNS,常見做法是單獨維護 API Token,再把密鑰貼進對話或本地配置。Token 輪轉、權限範圍和「模型能不能看見密鑰」都要自己兜。社區插件 dsh-plugin-cloudflare(維護者 MFCJ45681,分類:聯網工具)走的是另一條路:設置頁完成 OAuth 2.0 授權碼 + PKCE 登錄,令牌用 AES-256-GCM 落在本機憑據庫,並向智能體暴露一組只讀的 cloudflare_* 工具。下面按安裝、首次連接和工具用法說明怎麼落地。

這是什麼

dsh-plugin-cloudflare 是面向 DSH Web 的 bundle 插件(package.json 中 dsh.client.platform 爲 web)。它做四件事:連接/斷開 Cloudflare、把令牌加密存到 ~/.dsh/cloudflare/vault.json、在設置頁提供 Cloudflare 分節、註冊 9 個只讀 cloudflare_* 工具供模型調用。項目開源協議爲 MIT,當前 npm 包版本爲 0.1.0,要求 Node.js >= 20。README 寫明已實現 OAuth、憑據庫、工具與設置頁;DNS 寫入、緩存清理、Workers/KV/R2/D1 等仍在 DESIGN.md 分期規劃中。

核心功能

能力 說明
登錄 OAuth 2.0 授權碼流程,PKCE S256,state 雙校驗
憑據 ~/.dsh/cloudflare/vault.json(AES-256-GCM);主密鑰來自環境變量 CLOUDFLARE_PLUGIN_MASTER_KEY 或同目錄 master.key
工具 9 個只讀工具:狀態、配置、授權、登出、賬號、zone、zone 詳情、DNS 記錄、能力清單
UI 設置頁 → Cloudflare 分節(狀態卡、連接參數、高級選項;跟隨宿主主題)

工具統一返回信封 { ok, code, text, data, status, rateLimit };失敗不拋異常,code 可區分 E_NOT_CONFIGURED、E_NOT_CONNECTED、E_INVALID_TOKEN、E_PERMISSION、E_RATE_LIMITED 等。

安全邊界(據 README):令牌僅在宿主進程內使用,瀏覽器與工具返回值中不包含 token;界面路徑不存 client_secret;client_id 通過設置頁錄入而非工具參數(避免進入對話上下文)。HTTP 接口對方法、Content-Type、Origin、Host 等做了限制,反向代理場景可通過 allowedHosts 或 CLOUDFLARE_PLUGIN_ALLOWED_HOSTS 配置。

安裝與啓用

從 GitHub 安裝(README 推薦):

dsh plugin --profile web add github:MFCJ45681/dsh-plugin-cloudflare

本地開發可用軟鏈:

dsh plugin --profile web add link:/path/to/dsh-plugin-cloudflare

也可手工把包放進 <profile>/node_modules/,並把包名寫入 <profile>/package.json 的 dsh.profile.bundles(bundles 爲加載開關,dependencies 中未聲明也可加載)。

裝完後需重啓 DSH Web(dsh web)纔會加載新 bundle。重啓後應看到:設置頁出現 Cloudflare 分節;模型側多出 9 個 cloudflare_* 工具。

第一次連接

默認不必先填 client_id:插件內置 private client,首次加載時加密寫入憑據庫,設置頁顯示打碼的 client_id 並標「內置」。裝完直接點 授權登錄 即可進入 Cloudflare 同意頁。

內置 client 僅所屬 Cloudflare 賬號成員能授權。若要用其他賬號,需在 Dashboard 自建 OAuth client(約 5 分鐘,一次即可):

  1. Cloudflare Dashboard → Manage Account → OAuth clients → 新建;
  2. Response type = code,grant = authorization_code(需自動續期可加 refresh_token),token 認證選 none(PKCE);
  3. 回調地址與設置頁顯示完全一致,默認多爲 http://127.0.0.1:3080/plugins/cloudflare/callback(端口變化須兩邊同步);
  4. 設置 → Cloudflare → 高級 → 授權應用,填入自己的 client_id 並保存(留空則繼續用內置);
  5. 點 授權登錄,選賬號並勾選權限。

「授權登錄」是普通鏈接 href="/plugins/cloudflare/start",點擊跳轉,不易被彈窗攔截;從同意頁返回後設置頁會自動刷新。授權成功後狀態爲「已連接」,工具立即可用;access/refresh token 等加密寫在憑據庫,DSH 重啓仍有效,到期前會用 refresh token 續期。僅在設置頁登出、Cloudflare 後臺撤銷授權或 refresh 被拒時需重新授權。

典型用法

設置頁與 HTTP 接口

設置頁與工具共用一組 HTTP 路徑,例如:

GET  /plugins/cloudflare/status       連接狀態(無敏感字段)
GET  /plugins/cloudflare/bootstrap    狀態 + 能力 + 回調地址
POST /plugins/cloudflare/config       保存 client_id / 回調 / scope 等
GET  /plugins/cloudflare/start        302 到 Cloudflare 授權頁
GET  /plugins/cloudflare/callback     換碼、落盤
POST /plugins/cloudflare/logout       撤銷並刪除令牌
GET  /plugins/cloudflare/accounts     賬號
GET  /plugins/cloudflare/zones        zone 列表
GET  /plugins/cloudflare/scopes       scope 目錄

模型側工具一覽

工具名 作用
cloudflare_auth_status 連接狀態、賬號、scope、能力、憑據庫路徑
cloudflare_auth_setup 保存公開的 client_id / 回調 / scope(不收 token 與 secret)
cloudflare_auth_start 生成 state + PKCE,返回授權鏈接
cloudflare_auth_logout 撤銷並刪除本地令牌
cloudflare_accounts 可見賬號與 id
cloudflare_zones zone 列表,可按名過濾
cloudflare_zone 單個 zone 詳情
cloudflare_dns_records 某 zone 的 DNS 記錄,可按 type/name 過濾
cloudflare_capabilities 將授權 scope 譯爲可讀能力說明

在對話中讓模型先調 cloudflare_auth_status 確認已連接,再按需查 cloudflare_zones、cloudflare_dns_records 等,即可在不暴露令牌明文的前提下做只讀排查。

本地體檢與環境變量

不聯網、不打印令牌的自檢:

node scripts/doctor.js
node scripts/doctor.js --json

憑據目錄默認爲 ~/.dsh/cloudflare,可覆蓋:

export CLOUDFLARE_PLUGIN_DATA_DIR=/some/dir

適用場景與注意

適合:已在 DSH Web 裏開發智能體、需要讓模型只讀查詢 Cloudflare 賬號、Zone、DNS,且希望用 OAuth + 本機加密庫管理令牌,而不是把 API Token 寫進 prompt 的團隊或個人。

注意:

  • 插件以當前 DSH 進程權限運行,安裝前請自行審閱 GitHub 源碼 與 MIT 許可證。
  • 當前版本工具均爲只讀;改 DNS、清緩存等寫操作未實現。
  • 排錯可參考 README:回調 redirect_uri 不一致、state 超時(約 10 分鐘)、同意頁無賬號(組織關閉了 OAuth)、E_PERMISSION(重新授權補 scope)、換機器後主密鑰丟失需重新授權。

DSH 生態強調「一切皆插件」;社區目錄站點 SkillHub 插件頁 爲獨立收錄,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-plugin-cloudflare 把 Cloudflare 登錄收進設置頁與 PKCE 流程,令牌落在 AES-256-GCM 憑據庫,並向模型提供 9 個只讀 cloudflare_* 工具,適合在 DSH 裏做基礎設施只讀問答與排查。安裝命令見上文;詳情與排錯表以倉庫 README 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/MFCJ45681/dsh-plugin-cloudflare
  • GitHub:https://github.com/MFCJ45681/dsh-plugin-cloudflare
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜