Planka 在 2026 年 8 月釋出 2.2.0,把 OIDC 登入從 Community 版直接拔掉,丟進封閉原始碼的 Pro 訂閱裡。升級腳本沒替只用 SSO 登入的使用者留退路,這批帳號沒有本地密碼,升上去之後就直接被停權,管理員如果自己也走 SSO,重開機那一刻整個實例就沒人進得去。Cloudron 論壇、GitHub issue #1754、Hacker News 幾乎同時燒起來,維護者出面解釋「SSO 一直是企業版功能、單月吃掉一百多筆設定求助」,社群回的則是老話題:這又是一起「SSO 稅」。
事件本身不複雜,值得寫的是背後那條線。所謂 SSO 稅到底課的是什麼?為什麼 Planka 這一步特別扎眼?自架選型時該怎麼看授權模型的走向,才不會半年後又要換一輪工具?
OIDC 跟 SAML 不是同一件事,付費線一直畫在後者
社群把「登入靠外部身份提供者」全都叫 SSO,實際上企業付費那條線幾乎都畫在 SAML 加上 SCIM,而不是 OIDC 本身。SAML 的協定表面古老、實作陷阱多,SCIM 又要處理 provision 跟 deprovision 的雙向同步,兩個加起來吃掉的維護成本是 OIDC 的好幾倍。GitLab 自架版把 SAML 放在 Free、Grafana OSS 支援任意 OIDC issuer 但 SAML 走 Enterprise、Metabase 兩個協定一起關到 Pro,這幾條線畫得都算誠實:拿走的是實作跟支援真的很貴的那一塊。
Planka 這一步之所以刺,是因為它把整個 OIDC 也一起收走了。OIDC 對維護方來說幾乎沒有 SAML 那種泥沼——Passport、oauth2-proxy、oidc-client 這一輩子函式庫吃 issuer discovery、id_token 驗簽、refresh token 輪替,都是幾百行程式碼的事。上游拿走 OIDC 而不是只拿走 SAML,社群立刻讀出的訊息是「付費線正在往前移」,這才是這波輿論真正的引信。
停權腳本才是這次爆炸的真正原因
單純的授權模型調整不會這樣炸。真正踩到底線的是升級腳本的行為:資料庫遷移直接把 identityProviderIdentities 表清空,只有 SSO 身份、沒有本地密碼的帳號被標成 deactivated,管理員要一個一個手動重設密碼、發信給使用者。任何一個實例只要管理員自己也走 SSO,docker compose pull && up -d 跑完那一刻連 admin 都進不去,只能 exec 進資料庫下 SQL 把某個帳號拉回 active、再手動塞 bcrypt hash。
自架社群對「上游變授權」的容忍度其實比外界想的高。Elastic、Sentry、HashiCorp 都做過相對突兀的授權轉向,被罵歸被罵、大家最後都摸摸鼻子選邊站。真正無法接受的是「跑一次 docker compose up 就把生產環境弄成不可登入」。Planka 這波維護者出面道歉、補了 2.2.1 版把停權邏輯改成保留帳號等管理員手動處理,但社群記憶已經留下。
支援成本這條理由要拆兩面看
維護者提到 SSO 相關支援請求一個月破百筆,這數字在小型專案是活生生會把主線開發拖垮的量。Reddit、Discord、GitHub issue、電子郵件四個管道並行,每一筆都在描述自家 Keycloak realm 設定錯什麼、Authentik provider 綁哪個 property mapping、Azure AD B2C token claim 出不來,光是把問題還原就要半小時。把 SSO 收費並附上支援 SLA,是很多小專案唯一撐得起主線開發的商業模式,這件事情本身不該被扁平化成「開源背叛社群」。
問題出在切分方式。同樣是要靠訂閱撐營運,OpenProject 走的是 GPL 開源核心加上企業級擴充模組付費、身份整合這塊維持社群版可用;Vikunja 走的是完全開源、企業贊助模式;Ntfy 直接把服務放上雲端訂閱、自架版一切開放。這幾種都繳出了「商業化不等於課登入稅」的實例。Planka 挑了最直接、也最容易被解讀為 bait-and-switch 的那一條路:先讓社群大量部署、綁定使用者,再把身份接入這種通常「裝完就不會想再改」的功能拉走。這種順序決定了輿論走向。
沒把 OIDC 關到牆後面的替代選項
需要 Kanban 的可以看 Vikunja、Wekan、Focalboard 這幾個,都在社群版保留 OIDC 甚至 LDAP。整體專案管理端 OpenProject 的社群版蓋掉 Redmine 之後幾乎沒有懸念;Plane 雖然本身也走 open-core,但身份接入這一塊一直留在社群版。Wiki 型的 BookStack、Outline 的 OIDC 也都是 free tier 就有。密碼管理器把 SAML 收費、OIDC 開放的 Vaultwarden、Passbolt 也已經是業界慣例。
真正該當作訊號的是 GitLab 自架版把 SAML 放在 Free tier 這件事。GitLab 這種規模的專案願意連 SAML 都不切走,等於在告訴市場「登入不該是付費點」。反過來,把 OIDC 收走的案子在 2026 年這一年會被放大檢視,社群的耐心比五年前薄很多。
換套件之前,先把身份系統從應用拆出來
真正能保護自己的,是把 IdP 當基礎設施經營,而不是每套應用各自處理登入。Authentik、Zitadel、Pocket ID、Keycloak,四個都是社群版就吃得下 OIDC 加 SAML 加 SCIM 的自架 IdP,選一個架起來當單一身份來源。應用端只要接得上 OIDC 或 SAML,被綁定的就永遠是 IdP、不是應用本身。要換 Kanban、換 Wiki、換工單系統,帳號都不動。
還沒開始這一步的實例,建議至少維持兩個路徑:SSO 為主、本地帳號為備。管理員帳號一定要有本地密碼備援,即使公司政策全走 IdP,root admin 這一路的 break-glass 帳號寫進密碼管理器封存,跟 IdP 的可用性解耦。實際上很多把 Authentik 架在自己的 VPS 的團隊都有經歷過 IdP 本身掛掉、所有下游應用一起登不進去的教訓,這條備援線並不多餘。
備份層面,資料庫的 dump 之外,docker-compose.yml、環境變數、OIDC client secret、SAML metadata 全都要納入版本控管。上游一改授權,最壞情況是要能在四小時內把整包端到另一個支援 OIDC 的替代方案上。這件事跟軟體品質無關,是自架選擇的一部分成本。
結語
Planka 這一步再一次提醒自架社群一件事:軟體本身不是選型的全部,授權模型走向、商業模式的持續性、上游對社群的態度,都是要一併估算的。OIDC 是不是免費、SAML 收不收費,本身沒有標準答案,看的是有沒有預警、有沒有給遷移期、有沒有把使用者當人看。
自架部署要跑得穩、換得動,底層 VPS 的網路品質跟穩定度就得先給到位。NCSE Network 在臺灣是方電訊機房提供 Intel Gold CPU 加 NVMe SSD 的 VPS 主機,一路支援自架 Authentik、Zitadel 這類身份服務,也代管企業內部的 Kanban 跟 Wiki 環境。有意把身份系統拉出來、統一部署的團隊歡迎到 ncse.tw 了解方案。