[Angular2 + ASP.NET Web API] Google OAuth 2.0 OpenID Connect with Authorization Code Flow 授權碼流程

7 分鐘閱讀

目錄

Demo site


https://googleoidcdemo.maki0419.com/

本專案使用 Angular + ASP.NET Web API,示範如何在前後端分離的專案中實作 Google OAuth2 OpenID Connect 登入。

本文重點主要是在於實作,而非 OAuth 2.0 的流程講解
如果想要深入學習,請參考保哥的課程 《精通 OAuth 2.0 授權框架》

介紹

使用 Angular 實現 OpenID Connect (OIDC) 登入,網路上的教學大都是使用隱含流程 (Implicit flow)。
隱含流程不需要後端,適合 Angular 這種純前端應用。
它的設定比較簡單,設備維護成本低,但相較於授權碼流程 (Authorization code flow) 來說隱含流程的安全性較低

在較為大型的 Angular 應用程式專案中,常會搭配後端 API 以處理資料庫或是複雜的應用邏輯。
或許你不會為了 OIDC 而多開一台後端伺服器,但倘若只是把授權碼流程的一部份搬到現有的後端 API,這就成為了一個划算的決定。

本文 GitHub 專案


jim60105/GoogleOIDC_Angular_ASPNETWebAPI_Auth_Code_Flow

Try it out

套件安裝

授權流程

  1. 用戶在前端按下 Sign in with Google 按鈕

  2. 以 gsi 客戶端套件啟動授權碼流程

  3. 導向至 Google OAuth 授權頁面

  4. (使用者同意後),導向至 後端/api/Auth/oidc/signin,Model Binding 取得授權碼
    若是使用者拒絕,或是發生了任何失敗,error 參數就會接到內容

  5. 以授權碼去要回 idToken

  6. 導向回前端,將 idToken 以網址參數傳給 Angular

  7. Angular 前端應用程式接到 idToken

  8. 將 idToken 做 JWT decode,取得內容物

    如果需要在前 / 後端驗證 JWT Token 的有效性,可以叫這個 api
    Google 會驗證簽章、簽發者、有效期,並在驗證通過時返回內容
    (直接 JWT decode 會比打這個 API 要來得快,建議只在需要由 Google 驗證時呼叫它)
    https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123

    參考來源:
    https://developers.google.com/identity/sign-in/web/backend-auth#calling-the-tokeninfo-endpoint

參考資料

延伸閱讀