用 Google 的 OpenID Connect 做身分驗證
只要B2B的對外服務,若不能建置VPN來確保來源端,要避免防暴力破解、密碼外洩風險等成本高又容易出錯的帳號密碼系統,最簡單省事安全的做法之一應該就是把「身分驗證」委託給 Google,我們只要負責決定「誰能進來」就好了。
事前準備
首先要先去申請到的 Client ID 與 Client Secret,這是你的網站的身分,外部使用者完全不需要、也看不到這兩個值。
- 前往 Google Cloud Console 的「API 與服務 → 憑證」
- 點「建立憑證 → OAuth 用戶端 ID」
- 應用程式類型選「網頁應用程式」(不要選「電腦/桌面」類型,桌面類型無法設定 Web 用的重新導向 URI)
- 建立後取得 用戶端 ID 與 用戶端密鑰,
然後就可以丟給AI去幫你生成程式跟網站了
在「已授權的重新導向 URI」填入回呼網址,本機開發為:
http://localhost:5000/auth/callback


要特別注意:Google 會把 localhost 與 127.0.0.1 視為不同字串,不會自動互通。因此測試時要用瀏覽器開 http://localhost:5000,而不是 127.0.0.1 或 0.0.0.0,否則程式產生的 redirect_uri 會與登記值不符而被擋。
在程式內把設定完成後,就可以快速來驗證一下對不對了

因為我有啟動二階段驗證,所以會多一道手續來確認,但看到這個畫面代表我們前面的設定沒有問題

如此一來就進到畫面了

完整登入流程
- 使用者點「用 Google 登入」,程式導向 Google 授權頁
- 使用者在 Google 官方頁面完成驗證(可能包含二階段驗證)
- Google 帶著授權碼回呼到
/auth/callback - Authlib 用授權碼換取 token,並解析出已驗證的
userinfo(email、name) - 程式以 email 比對白名單,在名單內建立 session 放行,否則回 403 拒絕頁
小結
「Google OpenID Connect 驗證身分 + 白名單授權」是內部工具相當理想的組合,把最容易出錯、風險最高的密碼管理交給 Google,我們只要專注在「誰能進來」這件事情上,整體程式碼非常精簡,卻能得到企業級的登入安全控管 😛。