View Categories

WordPress 應用程式密碼建不出來的原因

1 分鐘閱讀

快速答案:應用程式密碼在「使用者 → 個人資料」最下方。找不到這個區塊,第一個原因是網站沒被 WordPress 判定為 HTTPS(常見於 CDN 或代理伺服器後面),第二個是資安外掛或程式碼把功能關了;看得到區塊、按了卻報錯,通常是 REST API 被擋。建出來後串接一直回 401,則多半是主機把驗證標頭丟掉。

為什麼會這樣 #

應用程式密碼是給外部程式(自動發文、資料同步、App)呼叫 WordPress API 用的,不能拿來登入後台。因為它不經過兩階段驗證,WordPress 規定只在 HTTPS 下提供。網站明明是 https,但 SSL 在 Cloudflare 或主機前端的代理就結束了,WordPress 收到的是一般 HTTP 請求,就會判定不安全而把區塊藏起來。

也因為它能繞過兩階段驗證,不少資安外掛(例如 Wordfence)有停用它的選項,主機商、佈景或某段程式碼也可能把它關掉。建立的動作本身透過 REST API 送出,資安外掛「禁止 REST API」或防火牆擋了 /wp-json/,就會按了沒反應或出現錯誤。

還有一種是名稱撞車:Google、Microsoft 信箱也有「應用程式密碼」,是給 SMTP 寄信用的,跟 WordPress 的完全無關,互相不能替代。

怎麼處理 #

  1. 用管理員登入,使用者 → 個人資料,捲到最下方;要替其他帳號建立,從使用者列表編輯該帳號。
  2. 看不到區塊:到 工具 → 網站健康狀態 看有沒有 HTTPS 相關警告;確認 設定 → 一般 的兩個網址都是 https。在 Cloudflare 後面的,確認主機端已有有效憑證後,SSL 模式改用「完整(嚴格)」;其他代理環境請主機商設定讓 WordPress 正確辨識 HTTPS。
  3. 還是看不到:逐一檢查資安外掛的登入安全設定,取消「停用應用程式密碼」;再查佈景與程式碼片段有沒有關閉此功能的篩選器。
  4. 按了報錯:開瀏覽器 F12 看 /wp-json/ 的請求是不是 401 或 403,放行已登入使用者的 REST API。
  5. 建立後這組密碼只顯示一次,立刻存進密碼管理工具;一個串接用一組,名稱寫清楚用途。
  6. 串接端回 401:確認填的是使用者名稱加這組密碼、網址是 https;Apache 主機常見驗證標頭被丟棄,要在 .htaccess 加上轉交規則 SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
  7. 給串接用的帳號只開需要的角色,不要掛在主管理員底下。

我們實際遇過的情況 #

幾個客戶站要串接外部服務時,請我們建立過應用程式密碼。其中一家電商卻怎麼都建不出來,這類情況我們照上面的順序,從 HTTPS 判定與資安外掛設定查起,不會為了開這個功能去關掉整套防護。

一個教育機構網站設定 SMTP 寄信時,試過改用信箱的應用程式密碼也沒成功;這要回到信箱服務商那端查(兩步驟驗證、管理員政策),跟 WordPress 後台建的那組無關。另一個被入侵、清理過的網站,我們在管理員帳號底下發現幾組來源不明的應用程式密碼。這種要全部撤銷,只重建確定在用的,因為改登入密碼並不會讓它們失效。

什麼時候該找人 #

要動 wp-config、.htaccess、Cloudflare SSL 模式或資安外掛設定,改錯可能讓全站打不開,或把防護整個關掉。後台出現你沒建立的應用程式密碼,請當成入侵徵兆處理,先看 後台多了不認識的管理員 的檢查順序。

常見問題 #

WordPress 個人資料裡為什麼沒有應用程式密碼? #

WordPress 只在 HTTPS 下提供。網站在 CDN 或代理後面沒被判定為 HTTPS,或資安外掛停用了此功能,區塊就會消失。

WordPress 應用程式密碼和 Gmail 的一樣嗎? #

不一樣。WordPress 的是給外部程式呼叫網站 API;信箱的是給 SMTP 寄信用,兩者不能互相替代。

改了管理員登入密碼,應用程式密碼會失效嗎? #

不會,要到個人資料逐一撤銷。後台出現不明的應用程式密碼,請當成入侵徵兆處理。

懷疑有人留了後門?網站救援當日受理;想有人每月幫你顧著帳號與防護:網站守護方案