觀點 · 資訊分享
Cloudflare Workers 能一鍵加上登入門禁:整個 Worker 一次保護,連預覽網址都不漏
Cloudflare 讓 Access 直接掛在 Worker 身上,不用再逐個網址設定。也能把帳號下所有 Workers 預設改成要先登入,本機用 wrangler dev 就能測登入身分。
- 發布
- 2026-08-15
- 篇幅
- 約 3 分鐘 · 1,536 字
- 結構
- 7 節 + 3 題常見問題
- 標籤

一句話看懂:Cloudflare 讓「登入門禁」(Access)直接掛在 Workers 上,不用再一個網址一個網址設定,還能把帳號下所有 Workers 預設改成要先登入。

先用白話講:Workers 與 Access 是什麼?
Workers 是 Cloudflare 讓你寫小程式的地方,網站、API、小工具都可以放上去。Access 則像一道門禁:沒有通過登入檢查的人,連門都進不來。
想像你開了一家店,店裡有前門、後門、員工通道(對應 Workers 的路由、自訂網域、workers.dev 網址)。以前要裝門禁,得在每一扇門各裝一台讀卡機,開了新門還要記得補裝。現在變成「把門禁裝在整間店的大門口」,不管有幾個出入口,都一次顧到。
發生什麼事
Cloudflare 在 8 月 14 日的更新日誌宣布,Workers 多了兩種新的 Access 保護方式:
- 綁在單一 Worker 上:以前一個 Worker 可能同時有路由、Custom Domain、workers.dev 三種網址,要手動一個個加進 Access 應用程式,網域變了還得同步。現在政策直接綁在 Worker 本身,所有關聯網址與預覽網址都自動受保護
- 一次套用到所有 Workers:把帳號下現有與新建的 Workers 全部預設成「要先登入」;若某個 Worker 必須公開,再替它加上 Worker 層級的略過(bypass)
設定彈性
- 可以選擇只保護預覽部署,或預覽與正式環境一起保護
- 登入條件有三種:Cloudflare 帳號成員、電子郵件、郵件網域
- 想要更細的規則,可到 Zero Trust 編輯政策
- 所有 Worker 的 Access 政策,可在儀表板 Workers & Pages 的 Access 分頁統一檢視與管理
- 也可以用 Workers API 設定,不一定要點儀表板
給開發者的技術細節
啟用 Access 後,每個通過驗證的請求都會帶 ctx.access,用 getIdentity() 就能取得登入者的電子郵件、名稱與群組,不必自己驗證 JWT:
export default {
async fetch(request, env, ctx) {
if (!ctx.access) {
return new Response("Access did not run", { status: 401 });
}
const identity = await ctx.access.getIdentity();
return Response.json({ aud: ctx.access.aud, email: identity?.email });
},
};
本機測試也方便:在 wrangler.jsonc 加上 dev 區塊,wrangler dev 時 Worker 就會收到模擬的身分,不用部署就能測登入與未登入兩種情境;把 dev 區塊拿掉,就等於模擬未登入。
{
"access": {
"dev": {
"aud": "my-app",
"identity": { "email": "[email protected]" }
}
}
}
我的看法
接案時常遇到客戶要一個「只給內部看」的測試站或預覽站,結果為了省事直接放在公開網址,只靠「網址沒人知道」。這很危險,因為網址一旦被分享出去或被收錄,就沒有任何防護。
這次的設計我覺得最實用的是「預覽部署一起保護」:開發階段把預覽站鎖起來,只有團隊成員的信箱能進,成本幾乎是零。至於「所有 Workers 預設私有」,我會很小心用,因為它會連對外的網站與 API 一起鎖住,要先盤點清楚哪些 Worker 需要公開,再逐一加 bypass,避免上線後才發現客戶網站打不開。
名詞小辭典
- Cloudflare Access:Cloudflare 的登入門禁服務,連線前先驗證身分。
- Zero Trust(零信任):不因為你在內網就信任你,每次連線都要驗證。
- 預覽部署(Preview Deployment):改程式後產生的臨時測試網址,用來給人先看效果。
- JWT:一種身分憑證格式,伺服器靠它確認你是誰。