ASP.NET Core 中的 Google 外部登入設定
本教學課程說明如何使用在上一頁建立的 ASP.NET Core 專案,讓使用者使用其 Google 帳戶登入,。
建立Google OAuth 2.0用戶端標識碼和秘密
遵循 Google 檔案中 的指引,將 Google Sign-In 整合到你的網路應用程式 中。
先必須有一個 Project,您可能需要建立一個。 選擇項目之後,請輸入 儀表板。
在 [儀錶板]的 [OAuth 同意 畫面] 中:
- 選擇 [使用者類型 - 外部],並 [創建]。
- 在 [應用程式資訊] 對話框中,為應用程式提供 應用程式 名稱、使用者支援電子郵件,以及 開發人員連絡資訊。
- 逐步執行 範圍 步驟。
- 逐步執行 測試使用者 步驟。
- 檢閱 OAuth 同意畫面,並返回應用程式 儀錶板。
在應用程式儀錶板的 [認證] 索引標籤中,選取 [建立認證]>[OAuth 用戶端標識符]。
選取 [應用程式類型]>[Web 應用程式],選擇 名稱。
在 [授權的重新導向 URI] 區段中,選取 [新增 URI] 來設定重新導向 URI。 重新導向 URI 範例:
https://localhost:{PORT}/signin-google
,其中{PORT}
佔位符是應用程式的埠。選取 [CREATE] 按鈕。
儲存 用戶端識別碼,並 客戶端密碼,以用於應用程式的組態。
部署網站時,可以選擇下列其中一項操作:
- 在 Google Console 中更新應用程式的重新導向 URI, 至應用程式的已部署重新導向 URI。
- 在 Google Console 中,為生產應用程式建立新的 Google API 註冊,並使用其生產環境的重新導向 URI。
儲存Google用戶端識別碼和秘密
使用 Secret Manager 儲存敏感性設定,例如 Google 用戶端識別碼和秘密值,。 針對此範例,請使用下列步驟:
依照 啟用秘密儲存的指示,初始化秘密儲存專案。
使用秘密金鑰
Authentication:Google:ClientId
和Authentication:Google:ClientSecret
,將敏感性設定儲存在本機秘密存放區中:dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
:
分隔符不適用於所有平臺上的環境變數階層式索引鍵。 例如,Bash不支援 :
分隔符。 雙底線 __
是:
- 所有平臺都支援。
- 自動替換為冒號,
:
。
您可以在 API 控制台中管理 API 認證和使用方式。
設定Google驗證
- 將
Google.Apis.Auth.AspNetCore3
NuGet 套件新增至應用程式。 - 將驗證服務新增至
program.cs
: - 遵循
Add Authentication for asp.net app
對 AddIdentity 的呼叫會配置預設方案參數。
AddAuthentication(IServiceCollection, String) 多載會設定 DefaultScheme 屬性。
AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 多載允許設定驗證選項,這些選項可用來設定不同用途的預設驗證配置。 隨後呼叫的 AddAuthentication
會覆寫之前設置的 AuthenticationOptions 屬性。
AuthenticationBuilder 註冊驗證處理程式的擴充方法,每個驗證方案只能呼叫一次。 存在多載,允許設定模式屬性、模式名稱和顯示名稱。
使用Google登入
- 在 Google Developer Library獲取到庫的連結。
- 然後移至 Google 開發人員按鈕產生。
- 將控制器設定為符合
data-login_uri="{HostName}/{ControllerName}/{actionName}"
屬性,因為它會在成功登入之後將您轉送至該連結。 - 建立一個控制器和動作,其中包含一個參數
string credential
,這個參數是在完成登入程序後由 Google 傳回的。 - 確認
credential
請使用以下程式碼:GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
- 這會擷取登入使用者的相關可用資訊,然後儲存在資料庫中。
變更預設回呼 URI
URI 區段 /signin-google
設定為Google驗證提供者的預設回呼。 您可以透過 GoogleOptions 類別中的 RemoteAuthenticationOptions.CallbackPath 屬性來設定與變更 Google 認證中間件的預設回呼 URI。
故障排除
- 如果登入無法運作,而且您未收到任何錯誤,請切換至開發模式,讓問題更容易偵錯。
- 如果未在
ConfigureServices
中呼叫services.AddIdentity
來設定 Identity,嘗試驗證將導致 ArgumentException :必須提供 'SignInScheme' 選項。 本教學課程中使用的專案範本可確保已設定 Identity。 - 如果網站的資料庫尚未透過套用首次遷移來建立,您會收到錯誤 :處理請求時發生資料庫操作失敗。 選取 [[套用移轉] 以建立資料庫,然後重新整理頁面以繼續超過錯誤。
- 成功驗證 OAuth 2.0 提供者(如 Google)的要求後,發生 HTTP 500 錯誤:參考 GitHub 問題。
- 如何使用 Google for React 和其他 SPA 應用程式實作外部驗證:請參閱 此 GitHub 問題。
後續步驟
- 本文說明如何使用Google進行驗證。 您可以遵循類似的方法,來對上一頁 提到的其他提供者進行身份驗證。
- 將應用程式發佈至 Azure 之後,請在 Google API 控制台中重設
ClientSecret
。 - 在 Azure 入口網站中將
Authentication:Google:ClientId
和Authentication:Google:ClientSecret
設定為應用程式設定。 組態系統已設定為從環境變數讀取金鑰。