共用方式為


ASP.NET Core 中的 Google 外部登入設定

瓦萊里伊·諾維茨基里克·安德森莎拉夫·阿貝塞里

本教學課程說明如何使用在上一頁建立的 ASP.NET Core 專案,讓使用者使用其 Google 帳戶登入,

建立Google OAuth 2.0用戶端標識碼和秘密

  • 遵循 Google 檔案中 的指引,將 Google Sign-In 整合到你的網路應用程式 中。

  • 移至 Google API & Services

  • 先必須有一個 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 用戶端識別碼和秘密值,。 針對此範例,請使用下列步驟:

  1. 依照 啟用秘密儲存的指示,初始化秘密儲存專案。

  2. 使用秘密金鑰 Authentication:Google:ClientIdAuthentication:Google:ClientSecret,將敏感性設定儲存在本機秘密存放區中:

    dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
    

: 分隔符不適用於所有平臺上的環境變數階層式索引鍵。 例如,Bash不支援 : 分隔符。 雙底線 __是:

  • 所有平臺都支援。
  • 自動替換為冒號,:

您可以在 API 控制台中管理 API 認證和使用方式。

設定Google驗證

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:ClientIdAuthentication:Google:ClientSecret 設定為應用程式設定。 組態系統已設定為從環境變數讀取金鑰。