場景開場:為什麼這三個詞要一起講
你請廠商做網站,提到「想讓客戶用 Google 或 Facebook 登入」,報價單上冒出三個詞:SSO、OAuth、JWT。它們常常一起出現,因為它們回答的是同一件事的三個層面:SSO 是「一次登入、到處通行」的體驗、OAuth 是「安全地借用別家帳號」的授權方式、JWT 是「證明你已登入」的那張通行證。搞懂這三兄弟,你看登入相關報價就不會被唬。以下用飯店與門禁的比喻各講一次。
名詞 1:SSO(單一登入)— 飯店的一張房卡開所有門
一句話:登入一次,就能通行多個系統,不用每個都重新輸入帳密。
類比:住飯店拿到一張房卡,它能開你的房門、健身房、停車場閘門——你不用在每個門前重新登記身分。SSO 就是這張「一卡通」。
實際例子:想像你是一家補習班,有官網、線上教材平台、家長 App 三個系統。導入 SSO 後,家長用同一組帳號登入一次,三個系統都通——不用記三組密碼,你也不用維護三套帳號。企業內部常用的 Google Workspace 登入公司各系統,就是 SSO。
名詞 2:OAuth(開放授權)— 不交出鑰匙,只給一張限時通行證
一句話:讓你用 Google/Facebook 帳號登入別的網站,卻不必把 Google 密碼交給那個網站。
類比:你請代客泊車,給的是「只能發動、開不了後車廂」的泊車鑰匙,而不是你整串鑰匙。OAuth 就是這種「有限授權」——網站拿到的是 Google 發的、範圍受限的通行證,永遠碰不到你的密碼。
實際例子:你的餐廳線上訂位系統加了「用 Google 登入」。客人點下去,Google 跳出「這個網站想讀取你的姓名和 Email,同意嗎?」——客人同意後,系統拿到的只是姓名和信箱,拿不到 Google 密碼,也讀不到信件。這就是 OAuth 在授權。
名詞 3:JWT(JSON Web Token)— 登入後隨身帶的防偽識別證
一句話:一張加了防偽簽章的電子識別證,向系統證明「我已經登入過了」。
類比:進辦公大樓換證,之後每一層樓的門禁只看你胸前那張證,不用回大廳重新驗身分。JWT 就是這張隨身證:裡面寫著「你是誰、能做什麼、到幾點過期」,並有防偽簽章,改一個字就會失效。
實際例子:你的製造業報價系統,業務登入後,系統發一張 JWT。之後他每查一次報價、下載一次文件,瀏覽器都自動帶著這張證,伺服器一驗簽章就知道「這人已登入、是業務、還沒過期」——不用每個動作都重新輸帳密。
三者之間的關係(概念圖)
想像一條登入流水線:使用者按下「用 Google 登入」→ OAuth 負責安全地跟 Google 借身分(授權)→ 借到後,系統發一張 JWT 給使用者當通行證(憑證)→ 若你有多個系統共用這套機制,整體體驗就是 SSO(單一登入)。 一句話:OAuth 管「怎麼安全地借帳號」、JWT 管「登入後怎麼證明身分」、SSO 管「這套體驗能不能一次通用到多個系統」。
對客戶決策的具體影響
- 預算:加「第三方登入(OAuth)」通常是幾天工作量;要做跨多系統的完整 SSO,成本明顯更高,因為要處理帳號整合與各系統對接。
- 時程:單純 Google/Facebook 登入約 3–5 天;企業級 SSO(如串接 Google Workspace/內部目錄)可能 1–3 週。
- 風險:JWT 若簽章金鑰外洩或過期設定錯誤,等於通行證被偽造。近期資安事件(如本週的 OIDC 簽章未驗證漏洞)正是這類機制沒做好驗證的後果——這也是為什麼「誰來實作登入」很重要。
該問廠商的 5 個問題
- 我要的是「第三方登入(OAuth)」還是「跨系統單一登入(SSO)」?哪個符合我的實際需求?
- 用戶密碼會存在我的系統嗎?(用 OAuth 的話,理想答案是「不會,交給 Google/Facebook」)
- JWT 的有效期怎麼設?過期或登出後如何確保舊證失效?
- 簽章金鑰怎麼保管、多久輪換?外洩了怎麼辦?
- 之後若要再加一個系統進 SSO,需要多少額外成本?
常見誤解
多數人以為「用 Google 登入 = 我的網站能看到對方的 Google 資料」。其實不然:OAuth 只給你使用者同意的、範圍受限的資訊(通常是姓名和 Email),你的網站永遠拿不到對方的 Google 密碼,也讀不到未經授權的資料。另一個誤解是「JWT 是加密的、很安全」——JWT 預設只是「簽章防篡改」,內容其實可被解讀,所以不要把敏感資料塞進 JWT。
常見問題 FAQ
我只想讓客人用 Google 登入,需要做到 SSO 嗎?
不需要。那只是 OAuth(第三方登入),通常幾天就能完成。SSO 是「同一組帳號通行多個系統」,只有你有多個系統要打通時才需要,成本也高得多。
用第三方登入,我的網站會拿到客人的臉書密碼嗎?
不會。OAuth 的設計就是讓網站永遠碰不到密碼,只拿到使用者同意分享的有限資料(多半是姓名和 Email)。這反而比自己存密碼更安全。
JWT 可以拿來存會員的個資或點數嗎?
不建議。JWT 預設只做防篡改簽章,內容可被讀取,塞敏感資料有外洩風險。JWT 適合放「身分與權限」這類非機密資訊,個資與點數應存在後端資料庫。
只做第三方登入,之後想升級成完整 SSO 難嗎?
可以升級,但要預留設計。若一開始就用標準的 OAuth/OIDC 架構實作,日後接更多系統會順很多;反之若隨便硬幹,未來整合成本會暴增。建議在報價階段就先講清楚未來規劃。
行動呼籲
搞不清楚你的登入需求該做到哪一層?ScriptWalker 提供 30 分鐘技術諮詢,用人話幫你判斷該用 OAuth、JWT 還是完整 SSO,並估出成本與時程。
- Email:[email protected]
- 電話:0916-224-047
- LINE:@ufv9089p