本教學課程示範如何使用在ASP.NET Core中的 Identity 外部登入提供者建立的範例 ASP.NET Core 專案,讓使用者透過 Google 帳戶登入。 遵循Google的官方指引,於Google 網頁版登入:設定中創建 Google API 用戶端 ID。
在Google中建立應用程式
- 流覽至Google Cloud平臺的 Google API和服務 頁面。
- 如果沒有專案存在,請選取 [ 建立專案 ] 按鈕來建立新的專案。 若要選取與已載入專案不同的其他專案,請在 UI 左上角選取已載入專案的按鈕,然後選擇其他專案。 若要新增專案,請選取UI左上角載入的專案按鈕,後面接著 [ 新增專案 ] 按鈕。
- 建立新項目時:
- 輸入專案名稱。
- 可選擇地為專案選取組織。
- 選擇建立按鈕。
建立項目之後,專案的 [ 儀錶板 ] 頁面就會載入,您可以在其中設定專案。
開啟 [ 認證] 索引標籤以建立 OAuth 用戶端。
建立認證的必要條件是設定 OAuth 同意畫面。 如果未設定同意,則會提示設定同意畫面。
- 選取 設定同意畫面 或選取側邊欄中的 OAuth 同意畫面 。
- 在 [OAuth 同意] 畫面中,選擇 開始使用。
- 設定應用程式名稱和使用者支援電子郵件。
- 將受眾類型設定為 外部。
- 輸入聯絡人電子郵件位址以新增 聯繫人資訊 。
- 同意條款。
- 選取 ,創建。
開啟 [用戶端 ] 提要欄選單項,以建立應用程式的客戶端認證:
- 選取 [ 建立用戶端] 按鈕。
- 選取 [Web 應用程式 ] 作為 [應用程式類型]。
- 輸入客戶的名稱。
- 新增 授權的重新導向 URI。 針對本機測試,請使用預設位址
https://localhost:{PORT}/signin-google,其中{PORT}佔位元是應用程式的埠。 - 選取 [ 建立] 按鈕以建立用戶端。
- 儲存 用戶端識別碼 和 客戶端密碼,稍後會在 ASP.NET 應用程式組態中使用。
備註
URI 區段 /signin-google 設定為Google驗證提供者的預設回呼。 在透過類別的RemoteAuthenticationOptions.CallbackPath所繼承的GoogleOptions屬性來配置 Google 驗證中間件時,可以變更預設的回呼 URI。
部署應用程式時,請執行下列其中一項:
- 在 Google Console 中更新應用程式的重新導向 URI, 至應用程式的已部署重新導向 URI。
- 在 Google Console 中,為生產應用程式建立新的 Google API 註冊,並使用其生產環境的重新導向 URI。
儲存Google用戶端識別碼和秘密
使用 秘密管理員儲存敏感性設定,例如 Google 用戶端識別碼和秘密值。 針對此範例,請遵循下列步驟:
根據 在 ASP.NET Core 中開發環境中安全儲存應用程式密碼的指示,初始化秘密儲存專案。
使用秘密鑰匙
Authentication:Google:ClientId(值:{CLIENT ID}佔位元)和Authentication:Google:ClientSecret(值:{CLIENT SECRET}佔位元)將敏感性設定儲存在本機秘密存放區中。dotnet user-secrets set "Authentication:Google:ClientId" "{CLIENT ID}" dotnet user-secrets set "Authentication:Google:ClientSecret" "{CLIENT SECRET}"
: 分隔符不適用於所有平臺上的環境變數階層式索引鍵。 例如,:不支援 分隔符。 雙底線 __是:
- 所有平臺都支援。
- 自動替換為冒號,
:。
在 API 控制台中管理 API 認證和使用方式。
設定Google驗證
將驗證服務新增至 Program 檔案:
services.AddAuthentication().AddGoogle(googleOptions =>
{
googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});
將驗證服務新增至 Startup.ConfigureServices:
services.AddAuthentication().AddGoogle(googleOptions =>
{
googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});
AddAuthentication(IServiceCollection, String) 多載會設定 DefaultScheme 屬性。
AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) 多載允許設定驗證選項,這些選項可用來設定不同用途的預設驗證配置。 隨後呼叫的 AddAuthentication 會覆寫之前設置的 AuthenticationOptions 屬性。
AuthenticationBuilder 註冊驗證處理程式的擴充方法,每個驗證方案只能呼叫一次。 存在多載,允許設定模式屬性、模式名稱和顯示名稱。
使用Google登入
- 執行應用程式,然後選取 [ 登入]。
- 在 [使用其他服務登入]。下,選取 [Google]。
- 瀏覽器會重新導向至 Google 進行驗證。
- 選取Google帳戶以登入或輸入Google認證。
- 如果這是第一次登入,系統會提示您允許應用程式存取 Google 帳戶資訊。
- 瀏覽器會重新導向回應用程式,您可以在其中設定電子郵件。
用戶現在已使用Google認證登入。
故障排除
- 如果登入在未收到任何錯誤的情況下無法運作,請切換至開發模式,讓應用程式和 Google 註冊更容易進行偵錯。
- 如果網站的資料庫尚未透過套用初始移轉來建立,就會發生下列錯誤:處理 要求時資料庫作業失敗。 選擇 套用移轉 來建立資料庫,然後重新整理頁面以繼續執行而不受錯誤影響。
- 如需透過 OAuth 2.0 提供者成功驗證請求之後 HTTP 500 錯誤的相關資訊,以及如何使用 Google 來為 React 和其他 SPA 應用程式實作外部驗證,請參閱Asp.Net Core Web Api 外部登入驗證中間件在成功驗證後未處理 'signin-google' 路由(
dotnet/AspNetCore.Docs#14169)。
後續步驟
- 本文示範使用Google進行驗證。 如需向其他外部提供者進行驗證的資訊,請參閱在 ASP.NET Core 中使用外部登入提供者Identity。
- 將應用程式部署至 Azure 之後,請在 Google API 控制台中重設
ClientSecret。 - 在 Azure 入口網站中將
Authentication:Google:ClientId和Authentication:Google:ClientSecret設定為應用程式設定。 組態系統已設定為從環境變數讀取金鑰。