作者:Valeriy Novytskyy 和 Rick Anderson
本文說明如何建置 ASP.NET Core 應用程式,讓用戶能夠使用 OAuth 2.0 搭配外部驗證提供者的認證登入。
Facebook、Twitter、Google 和 Microsoft 提供者的說明請見下列各節,並使用本文建立的入門專案。 您可透過 OpenIddict、AspNet.Security.OAuth.Providers 和 AspNet.Security.OpenId.Providers 這類協力廠商套件,取得其他提供者。
讓用戶能夠使用其現有的認證登入,方便使用者,並將管理登入程式的許多複雜度轉移給第三方。
建立新的 ASP.NET Core 專案
- 選取 [ASP.NET Core Web 應用程式] 範本。 選擇 [確定]。
- 在 [驗證類型] 輸入中,選取 [個別帳戶]。
套用遷移
- 執行應用程式並選取 [登錄] 連結。
- 輸入新帳戶的電子郵件和密碼,然後選取 [註冊]。
- 請遵循指示進行遷移。
使用 Proxy 或負載平衡器轉送要求資訊
如果將應用程式部署於 Proxy 伺服器或負載平衡器後方,可能就會在要求標頭中將一些原始要求資訊轉送到應用程式。 此資訊通常會包括安全要求配置 (https
)、主機和用戶端 IP 位址。 應用程式不會自動讀取這些要求標頭來探索並使用原始要求資訊。
此配置可用於產生連結,其會對使用外部提供者的驗證流程產生影響。 遺失安全配置 (https
) 會導致應用程式產生不正確且不安全的重新導向 URL。
使用轉送標頭中介軟體,使應用程式能夠使用原始要求資訊來處理要求。
如需詳細資訊,請參閱設定 ASP.NET Core 以處理 Proxy 伺服器和負載平衡器。
使用秘密管理員來儲存登入提供者指派的令牌
社交登入提供者會在註冊程序期間指派應用程式識別碼和應用程式密鑰憑證。 確切權杖名稱會依提供者而有所不同。 這些令牌代表應用程式用來存取提供者 API 的認證。 令牌會構成 使用者秘密 ,這些密碼可透過 秘密管理員的協助連結至您的應用程式設定。 相較於在設定檔 (例如 appsettings.json
) 中儲存權杖,用戶密鑰是較安全的替代方案。
重要
秘密管理工具僅適用於本地開發和測試。 使用 Azure Key Vault 設定提供者保護預備和生產秘密,如果您不想在本機使用秘密管理員,也可以用於本機開發和測試。
如需儲存每個登入提供者所指派之令牌的指引,請參閱 在 ASP.NET Core 開發中安全儲存應用程式機密。
設定登入提供者
使用下列文章來設定登入提供者和應用程式:
多個驗證提供者
當應用程式需要多個提供者時,請在AddAuthentication上鏈結提供者擴充方法:
builder.Services.AddAuthentication()
.AddGoogle(options =>
{
// Google configuration options
})
.AddFacebook(options =>
{
// Facebook configuration options
})
.AddMicrosoftAccount(options =>
{
// Microsoft Account configuration options
})
.AddTwitter(options =>
{
// Twitter configuration options
});
如需每個提供者的詳細設定指引,請參閱各自的文章。
選擇性地設定密碼
當您使用外部登入提供者註冊時,您並未向應用程式註冊密碼。 這可減輕您為網站建立和記住密碼,但也可讓您完全依賴外部登入提供者進行網站存取。 如果外部登入提供者無法使用,您將無法登入應用程式。
若要使用您在使用外部提供者登入程式期間設定的電子郵件來建立密碼並登入:
- 選取右上角的 Hello <電子郵件別名> 連結,以流覽至 [管理 ] 檢視:
- 選取 [建立]:
- 設定有效的密碼,您可以使用此認證來使用電子郵件位址登入。