在不 ASP.NET Core 标识的情况下使用社交登录提供程序身份验证Use social sign-in provider authentication without ASP.NET Core Identity

本文内容

作者: Kirk LarkinRick Anderson

ASP.NET Core 中的 Facebook、Google 和外部提供程序身份验证 介绍如何使用户能够使用 OAuth 2.0 通过外部身份验证提供程序中的凭据进行登录。该主题中所述的方法包括 ASP.NET Core 标识作为身份验证提供程序。

此示例演示如何使用外部身份验证提供程序,而无需ASP.NET Core 标识。这对于不需要 ASP.NET Core 标识的所有功能,但仍需要与受信任的外部身份验证提供程序集成的应用很有用。

此示例使用Google 身份验证对用户进行身份验证。使用 Google 身份验证将管理登录过程的许多复杂性转移到 Google。若要与其他外部身份验证提供程序集成,请参阅以下主题:

ConfigurationConfiguration

ConfigureServices 方法中,使用 AddAuthenticationAddCookieAddGoogle 方法配置应用的身份验证方案:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // requires
  4. // using Microsoft.AspNetCore.Authentication.Cookies;
  5. // using Microsoft.AspNetCore.Authentication.Google;
  6. // NuGet package Microsoft.AspNetCore.Authentication.Google
  7. services
  8. .AddAuthentication(options =>
  9. {
  10. options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
  11. options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
  12. })
  13. .AddCookie()
  14. .AddGoogle(options =>
  15. {
  16. options.ClientId = Configuration["Authentication:Google:ClientId"];
  17. options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
  18. });
  19. services.AddRazorPages();
  20. }

对的调用 AddAuthentication 设置应用程序的 DefaultSchemeDefaultScheme 是以下 HttpContext 身份验证扩展方法使用的默认方案:

如果将应用程序的 DefaultScheme 设置为CookieAuthenticationDefaults. AuthenticationScheme ("cookie"),则会将应用程序配置为使用 cookie 作为这些扩展方法的默认方案。如果将应用程序的 DefaultChallengeScheme 设置为GoogleDefaults. AuthenticationScheme ("Google"),则会将应用程序配置为使用 Google 作为调用 ChallengeAsync的默认方案。DefaultScheme``DefaultChallengeScheme 重写。有关在设置时覆盖 DefaultScheme 的其他属性,请参阅 AuthenticationOptions

Startup.Configure中,调用 UseRoutingUseEndpoints之间的 UseAuthenticationUseAuthorization这会设置 HttpContext.User 属性,并为请求运行授权中间件:

  1. app.UseRouting();
  2. app.UseAuthentication();
  3. app.UseAuthorization();
  4. app.UseEndpoints(endpoints =>
  5. {
  6. endpoints.MapRazorPages();
  7. });

若要详细了解身份验证方案,请参阅身份验证概念若要详细了解 cookie 身份验证,请参阅 使用 cookie 而无需 ASP.NET Core 标识的身份验证

应用授权Apply authorization

通过将 AuthorizeAttribute 特性应用到控制器、操作或页来测试应用的身份验证配置。以下代码将访问隐私页面的权限限制为已经过身份验证的用户:

  1. [Authorize]
  2. public class PrivacyModel : PageModel
  3. {
  4. }

注销Sign out

若要注销当前用户并删除其 cookie,请调用SignOutAsync下面的代码将 Logout 页处理程序添加到索引页:

  1. public class IndexModel : PageModel
  2. {
  3. public async Task<IActionResult> OnPostLogoutAsync()
  4. {
  5. await HttpContext.SignOutAsync();
  6. return RedirectToPage();
  7. }
  8. }

请注意,对 SignOutAsync 的调用未指定身份验证方案。应用程序的 DefaultScheme CookieAuthenticationDefaults.AuthenticationScheme 用作回退。

其他资源Additional resources

ASP.NET Core 中的 Facebook、Google 和外部提供程序身份验证 介绍如何使用户能够使用 OAuth 2.0 通过外部身份验证提供程序中的凭据进行登录。该主题中所述的方法包括 ASP.NET Core 标识作为身份验证提供程序。

此示例演示如何使用外部身份验证提供程序,而无需ASP.NET Core 标识。这对于不需要 ASP.NET Core 标识的所有功能,但仍需要与受信任的外部身份验证提供程序集成的应用很有用。

此示例使用Google 身份验证对用户进行身份验证。使用 Google 身份验证将管理登录过程的许多复杂性转移到 Google。若要与其他外部身份验证提供程序集成,请参阅以下主题:

ConfigurationConfiguration

ConfigureServices 方法中,使用 AddAuthenticationAddCookieAddGoogle 方法配置应用的身份验证方案:

  1. services
  2. .AddAuthentication(options =>
  3. {
  4. options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
  5. options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
  6. })
  7. .AddCookie()
  8. .AddGoogle(options =>
  9. {
  10. options.ClientId = Configuration["Authentication:Google:ClientId"];
  11. options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
  12. });

AddAuthentication的调用将设置应用的DefaultSchemeDefaultScheme 是以下 HttpContext 身份验证扩展方法使用的默认方案:

如果将应用程序的 DefaultScheme 设置为CookieAuthenticationDefaults. AuthenticationScheme ("cookie"),则会将应用程序配置为使用 cookie 作为这些扩展方法的默认方案。如果将应用程序的 DefaultChallengeScheme 设置为GoogleDefaults. AuthenticationScheme ("Google"),则会将应用程序配置为使用 Google 作为调用 ChallengeAsync的默认方案。DefaultScheme``DefaultChallengeScheme 重写。有关在设置时覆盖 DefaultScheme 的其他属性,请参阅 AuthenticationOptions

Configure 方法中,调用 UseAuthentication 方法来调用设置 HttpContext.User 属性的身份验证中间件。在调用 UseMvcWithDefaultRouteUseMvc之前调用 UseAuthentication 方法:

  1. app.UseAuthentication();

若要详细了解身份验证方案,请参阅身份验证概念若要详细了解 cookie 身份验证,请参阅 使用 cookie 而无需 ASP.NET Core 标识的身份验证

应用授权Apply authorization

通过将 AuthorizeAttribute 特性应用到控制器、操作或页来测试应用的身份验证配置。以下代码将访问隐私页面的权限限制为已经过身份验证的用户:

  1. [Authorize]
  2. public class PrivacyModel : PageModel
  3. {
  4. }

注销Sign out

若要注销当前用户并删除其 cookie,请调用SignOutAsync下面的代码将 Logout 页处理程序添加到索引页:

  1. public class IndexModel : PageModel
  2. {
  3. public async Task<IActionResult> OnPostLogoutAsync()
  4. {
  5. await HttpContext.SignOutAsync();
  6. return RedirectToPage();
  7. }
  8. }

请注意,对 SignOutAsync 的调用未指定身份验证方案。应用程序的 DefaultScheme CookieAuthenticationDefaults.AuthenticationScheme 用作回退。

其他资源Additional resources