ASP.NET Core 中的 Facebook、Google 和外部提供程序身份验证Facebook, Google, and external provider authentication in ASP.NET Core

本文内容

作者:Valeriy NovytskyyRick Anderson

本教程演示如何生成 ASP.NET Core 3.0 应用,该应用可让用户使用外部身份验证提供程序提供的凭据通过 OAuth 2.0 登录。

以下几节中介绍了 FacebookTwitterGoogleMicrosoft 提供程序,这些提供程序使用本文中创建的初学者项目。第三方程序包中提供了其他提供程序,例如 AspNet.Security.OAuth.ProvidersAspNet.Security.OpenId.Providers

让用户使用其现有凭据登录的好处:

  • 方便用户操作。
  • 将管理登录流程的许多复杂性转移到了第三方。

有关社交登录如何驱动流量和客户转换的示例,请参阅 FacebookTwitter 的案例分析。

创建新的 ASP.NET Core 项目Create a New ASP.NET Core Project

  • 创建新项目。
  • 依次选择“ASP.NET Core Web 应用程序”和“下一步” 。
  • 提供项目名称,再确认或更改位置 。选择“创建” 。
  • 在下拉列表 (ASP.NET Core {X.Y}) 中选择最新版 ASP.NET Core,然后选择“Web 应用程序” 。
  • 在“身份验证”下,选择“更改”再设置针对单个用户帐户的身份验证 。选择“确定” 。
  • 在“创建新的 ASP.NET Core Web 应用程序”窗口中,选择“创建” 。
  • 打开终端。对于 Visual Studio Code,可以打开集成终端

  • 将目录更改为 (cd) 包含项目的文件夹。

  • 对于 Windows,运行下面的命令:

  1. dotnet new webapp -o WebApp1 -au Individual -uld

对于 macOS 和 Linux,运行下面的命令:

  1. dotnet new webapp -o WebApp1 -au Individual
  • dotnet new 命令可在“WebApp1”文件夹中创建新的 Razor Pages 项目 。
  • -au Individual 创建用于个人身份验证的代码。
  • -uld 使用 LocalDB,这是 SQL Server Express for Windows 的轻型版本。省略 -uld 以使用 SQLite。
  • code 命令将在新 Visual Studio Code 实例中打开“WebApp1”文件夹 。

应用迁移Apply migrations

  • 运行应用并选择“注册”链接 。
  • 输入新帐户的电子邮件地址和密码,再选择“注册” 。
  • 按照说明操作来应用迁移。

使用代理或负载均衡器转发请求信息Forward request information with a proxy or load balancer

如果应用部署在代理服务器或负载均衡器后面,则可能会将某些原始请求信息转发到请求标头中的应用。此信息通常包括安全请求方案 (https)、主机和客户端 IP 地址。应用不会自动读取这些请求标头以发现和使用原始请求信息。

方案用于通过外部提供程序影响身份验证流的链接生成。丢失安全方案 (https) 会导致应用生成不正确且不安全的重定向 URL。

使用转发标头中间件以使应用可以使用原始请求信息来进行请求处理。

有关详细信息,请参阅 配置 ASP.NET Core 以使用代理服务器和负载均衡器

使用 SecretManager 存储登录提供程序分配的令牌Use SecretManager to store tokens assigned by login providers

社交登录提供程序在注册过程中分配“应用程序 ID” 和“应用程序机密” 。确切的令牌名称因提供程序而异。这些令牌代表应用用来访问其 API 的凭据。令牌构成“机密”,可利用机密管理器将其链接到应用配置。机密管理器是在配置文件(例如 appsettings.json )中存储令牌更安全替代方法。

重要

机密管理器仅用于开发目的。可使用 Azure Key Vault 配置提供程序存储和保护 Azure 测试和生产机密。

按照在 ASP.NET Core 中进行开发期间安全存储应用机密主题中的步骤进行操作,以便存储以下每个登录提供程序分配的令牌。

应用程序所需的安装登录提供程序Setup login providers required by your application

使用以下主题配置应用程序,以使用相应的提供程序:

多个身份验证提供程序Multiple authentication providers

如果应用需要多个提供程序,请在 AddAuthentication 后面链接提供程序扩展方法:

  1. services.AddAuthentication()
  2. .AddMicrosoftAccount(microsoftOptions => { ... })
  3. .AddGoogle(googleOptions => { ... })
  4. .AddTwitter(twitterOptions => { ... })
  5. .AddFacebook(facebookOptions => { ... });

选择性地设置密码Optionally set password

使用外部登录提供程序注册,即表明还没有向应用注册密码。这可让用户无需创建和记住站点密码,但也会使用户依赖外部登录提供程序。如果外部登录提供程序不可用,则无法登录网站。

使用外部提供程序在登录过程中设置的电子邮箱创建密码和登录:

  • 选择右上角的“Hello <电子邮件别名>”链接,导航到“管理”视图 。

Web 应用程序“管理”视图

  • 选择“创建”

“设置密码”页

  • 设置一个有效密码,可以用此密码和邮箱登录。

后续步骤Next steps

  • 请参阅此 GitHub 问题,了解有关如何自定义登录按钮的信息。
  • 本文介绍了外部身份验证,并说明了向 ASP.NET Core 应用添加外部登录所需的先决条件。
  • 引用特定于提供程序的页,为应用所需的提供程序配置登录。
  • 可能需要保留有关用户及其访问和刷新令牌的其他数据。有关详细信息,请参阅 在 ASP.NET Core 中保存外部提供程序的其他声明和令牌