跳至正文

Cloudflare Turnstile ​

Turnstile 是 fn-knock 登入頁面可選用的人機驗證方式。它只驗證登入前的瀏覽器請求,無法取代反向 Proxy、CDN 或 WAF。

設定步驟 ​

  1. 登入 Cloudflare Dashboard,建立一個 Turnstile Widget。
  2. Widget Type 可維持一般可見模式。在 Hostname 清單中加入登入頁面使用的網域;不要填入通訊協定、路徑或連接埠。
  3. 複製 Widget 的 Site key 與 Secret key。
  4. 開啟 fn-knock 的 系統設定 → Challenge,選擇 Turnstile,填入兩組 Key 並儲存。
  5. 從真實公網開啟身分驗證 Host,完成一次登入測試。

身分驗證 Host 若為 auth.example.com,Cloudflare 中就應登錄 auth.example.com。如果存取入口經過 CDN 或 Tunnel,請填寫使用者最終在瀏覽器中看到的網域,而不是 localhost、Container Name 或閘道的內網位址。

Site key 會傳送至瀏覽器;Secret key 只會在伺服器端呼叫 Cloudflare Siteverify API 時使用。請勿將 Secret Key 寫入前端程式碼、公開 Issue 或疑難排解截圖。

fn-knock 會將識別到的用戶端 IP 一併交給 Turnstile 驗證。前方若有 CDN 或反向 Proxy,請先確認請求記錄中的用戶端 IP 正確。

常見失敗 ​

現象優先檢查
Widget 未顯示Widget Hostname、瀏覽器能否連線至 Cloudflare、登入頁面是否已載入新設定
顯示設定尚未完成兩組 Key 是否都已儲存、登入頁面是否仍沿用舊設定
Widget 通過後仍然失敗Secret key 是否屬於同一個 Widget、Cloudflare Siteverify 連線能力、伺服器時間、網域與 Proxy 路徑
顯示 Token 為空或回應無效瀏覽器是否送出 Widget 結果、反向 Proxy 是否改寫 Request Body
在區域網路中看似未生效私有網路來源可能觸發本地豁免;請改用行動網路驗證
只透過 IP 位址存取Hostname 驗證與 HTTPS Context 通常不適用 Turnstile;請改用網域

Cloudflare 驗證服務無法連線時,fn-knock 會拒絕本次身分驗證,而不是略過人機驗證。若網路對 Cloudflare 的連線不穩定,可切回不依賴第三方服務的 PoW。

Cloudflare 的 Widget Type 與後台介面可能變動,實際選項請以 Turnstile 官方文件為準。

QQ 群組:1081609274