為什麼要 Firebase Auth?
之前我們設定的Auth, 是gcp上使用資源的身份檢核, 而firebase auth, 則是檢查來自client side的身份是否合法
| 情境 | 使用何種 Auth |
|---|---|
| Cloud Run A 呼叫 Cloud Run B | IAM Auth(Service Account Token) |
| 終端使用者從瀏覽器打 BFF | Firebase Auth(User ID Token) |
Firebase Auth 是 GCP 的 managed 終端使用者身分驗證服務。使用者登入後會拿到一個 Firebase ID Token(JWT),BFF 在 server 端驗證此 JWT 的合法性。
Firebase 本質上是 Google 專為移動與網頁開發者設計的 平台 (BaaS - Backend as a Service)。
使用firebase的好處
signInWithPopup 即可。本日需要的實作
完成firebase console設定, 開啟google sign-in 記下firebaseConfig與proj資訊
建立client app
BFF 驗證流程 - 驗證登入者屬於白名單
terraform調整 - bff image, cloud run支援firebase client flow模式
設定firebase console
在這邊需要去到firebase console: https://console.firebase.google.com/
做設定 因為firebase提供一些gcp沒有的快速自動化 比較方便
建立新專案, 命名採用和gcp相同proj, 方便管理

建立過程可以關閉google analytic功能 用不到
注意專案名稱輸入後 會產生有後綴的firebase project id, 這在之後測試和設定cloud run會用到
建立後點選 安全性 > authentication 開始使用

供應商選google

右上角勾選啟用, 名稱自由填個好辨識的 支援郵件選自己 並儲存

接著選擇左側 設定 > 一般

頁面滑到下方 應用程式選擇網頁

專案名稱自由填, 不需要託管(我們會託管在gcp)

註冊後會顯示一段config用來啟動firebase服務, 待會client app會用到先複製存到記事本之後會用到

前往控制台
去到authentication 的setting頁籤
確認authorized domains有localhost(用於本地測試)
之後client app部署到cloud run後 會再加上cloud run url(才能允許來自client的domain)

在此補充 firebase 的apikey 不是密鑰而是公開識別碼, 主要是靠security rules, authorized domains提供安全性
我們會在 /client 中新增index.html 建立一個簡易的網頁來觸發google登入 顯示取得token內容
把剛才複製的config貼入index中
會在 /bff 中實作 /health /query 來檢查服務健康 以及驗證token (請參照bff中實作)
訪問localhost網址
應該就可以跑google login, 和打bff的query api

完成local測試後
就可以打包 同步上gcp了
跑新增的 make build-push-bff 完成bff打包
再跑 make up 同步上GCP
注意 今天只有把bff的image推上cloud run, client還沒部署 所以firebase的authentication > domains還不用更新client部署後的url