ASP.NET Core Identity 中的外部提供程序身份验证

作者:Valeriy NovytskyyRick Anderson

本文介绍如何构建一个 ASP.NET Core 应用,使用户能够使用外部身份验证提供程序的凭据使用 OAuth 2.0 登录。

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

让用户使用其现有凭据登录是方便用户,并将管理登录过程的许多复杂性转移到第三方。

创建新的 ASP.NET Core 项目

  • 选择“ASP.NET Core Web 应用”模板。 选择“确定”
  • 在“身份验证类型”输入中,选择“个人帐户”。

应用迁移

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

使用代理或负载均衡器转发请求信息

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

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

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

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

使用机密管理器存储登录提供程序分配的令牌

社交登录提供程序在注册过程中分配“应用程序 ID”和“应用程序机密”。 确切的令牌名称因提供程序而异。 这些令牌表示应用用于访问提供程序 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 <电子邮件别名> 链接,导航到 “管理 ”视图:

Web 应用程序“管理”视图

  • 选择创建

“设置密码”页

  • 设置有效的密码,可以使用此凭据使用电子邮件地址登录。

其他信息