跳到主要內容

CI4 + Google Oauth2

因自己在教育處寫的系統無法使用 SSO OpenID 的認證服務,所以改以使用 Google OAuth2.0 作 gm.kl.edu.tw 網域帳號的認證。不過,後來發現把這一部份研究清楚也很有好處,首先不會受限於一定要是 OpenID 帳號才能使用的系統,因為現實面上有很多老師和承辦還是不習慣使用 OpenID 附帶的 gm.kl.edu.tw 帳號;再後來用了 firebase 服務後,更可以擴大到更廣的 OAuth(如FB、Github…等)。



 Google API 提供 OAuth2.0 的帳號認證服務,主要的功能是提供網頁系統可以認證 Google 帳號,並提供認證帳號的基本資訊。

Google Cloud 網址:https://console.cloud.google.com/

在CI4要使用 Google OAuth2.0須先在 CI4 系統中安裝 「Google APIs Client Library for PHP」

composer require google/apiclient:^2.12.1

認證程式參考資料:Login with Google for Codeigniter 

https://github.com/angel-of-death/Codeigniter-Google-OAuth-Login

Google Cloud API 設定

1. 到 Google Cloud 建立專案


2. 在專案的 「API和服務」功能下建立 OAuth2.0用戶端憑證:


用戶端憑證有兩種情形:內部及外部。

「內部」表可以直接使用來認證與專案同網域的帳號,「外部」表可以用來認證任何網域的 Google 帳號,但需要經過 Google 的程式審查,我還沒試過!後來用了 firebase 後就可認證其他網域的帳號了。


在憑證的設定中,最重要的已授權的重新導向URI的部份,也就是一般的 Call Back URI,成功經過 Google 認證後會自動導向的網址,並會附帶 token,利用這個 token 就可以進一步取得使用者的基本資訊。

而同時有好幾個網站都用這一個用戶端憑證時(基本上我寫的所有網站都是用這個憑證…),要如何分辨是哪個網站來的?要回去哪邊?
就是用設定來指定 redirectURI:


我採用上述的範例程式改的,所以設定檔是放在 App/Config/Google.php中。

認證程序:

Google OAuth2 整個流程為:取得認證網址(內含 projectID 和 redirectURI)→ Redirect 到 Google 進行認證 → 認證不通過則顯示錯誤訊息,認證通過後依照 redirectURI 返回系統(帶著 tokenID)→ 由網頁系統再藉由 tokenID 連去 Google 取得使用者基本資訊 → 網頁系統跟據使用者的資料進行設定 → …

1. 取得 google apiclient 的 auth url ,加到 login 的連結上。



2. 連線到 Google 進行認證




如果使用 chrome 瀏覽器,而且有使用同步的功能時,會自動取得同步的帳號。

3. 如果認證成功的話,就會依照 redirect uri 的設定轉至 callback uri 並帶使用者的token,以供後續取得使用者資訊;如果認證失敗的話,則由 Google 產生認證不成功的資訊。


認證成功後,用 getUserInfo()取得使用者的基本資料。


藉由token google client API 從 google 取得帳號的基本資料後,再進行系統內的權限設定等等。




留言