觀點 · 資訊分享

Cloudflare Workers 能一鍵加上登入門禁:整個 Worker 一次保護,連預覽網址都不漏

Cloudflare 讓 Access 直接掛在 Worker 身上,不用再逐個網址設定。也能把帳號下所有 Workers 預設改成要先登入,本機用 wrangler dev 就能測登入身分。

發布
2026-08-15
篇幅
約 3 分鐘 · 1,536 字
結構
7 節 + 3 題常見問題
標籤
#Cloudflare#Workers#Cloudflare Access#Zero Trust#wrangler
Cloudflare Workers 能一鍵加上登入門禁:整個 Worker 一次保護,連預覽網址都不漏

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

Workers 可一鍵加登入門禁資訊圖卡:Access 掛在 Worker 上,所有網址一次受保護,不用逐一設定

先用白話講:Workers 與 Access 是什麼?

Workers 是 Cloudflare 讓你寫小程式的地方,網站、API、小工具都可以放上去。Access 則像一道門禁:沒有通過登入檢查的人,連門都進不來。

想像你開了一家店,店裡有前門、後門、員工通道(對應 Workers 的路由、自訂網域、workers.dev 網址)。以前要裝門禁,得在每一扇門各裝一台讀卡機,開了新門還要記得補裝。現在變成「把門禁裝在整間店的大門口」,不管有幾個出入口,都一次顧到。

發生什麼事

Cloudflare 在 8 月 14 日的更新日誌宣布,Workers 多了兩種新的 Access 保護方式:

  1. 綁在單一 Worker 上:以前一個 Worker 可能同時有路由、Custom Domain、workers.dev 三種網址,要手動一個個加進 Access 應用程式,網域變了還得同步。現在政策直接綁在 Worker 本身,所有關聯網址與預覽網址都自動受保護
  2. 一次套用到所有 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:一種身分憑證格式,伺服器靠它確認你是誰。

資料來源

常見問題

Cloudflare Access 是什麼?
Access 是 Cloudflare 的登入門禁服務:任何人要連到你的網站或工具之前,要先通過登入與身分檢查。常用在公司內部系統、後台、測試站,不必自己寫登入功能。
「所有 Workers 預設私有」會不會把對外的網站也鎖起來?
會。開啟後,帳號下現有與新建的 Workers 都需要先登入。如果某個 Worker 要維持公開,要替它加上 Worker 層級的略過(bypass)設定。開之前最好先盤點哪些是對外服務。
我可以只保護測試用的預覽網址嗎?
可以。官方說明不論是保護單一應用或全部 Workers,都能選擇只保護預覽部署,或預覽與正式環境一起保護。
LINE