- 通用
- 身份验证
- 授权
- 数据保护
- 机密管理
在不 ASP.NET Core 标识的情况下使用社交登录提供程序身份验证
ASP.NET Core 中的 Facebook、Google 和外部提供程序身份验证 介绍如何使用户能够使用 OAuth 2.0 通过外部身份验证提供程序中的凭据进行登录。 该主题中所述的方法包括 ASP.NET Core 标识作为身份验证提供程序。
此示例演示如何使用外部身份验证提供程序,而无需ASP.NET Core 标识。 这对于不需要 ASP.NET Core 标识的所有功能,但仍需要与受信任的外部身份验证提供程序集成的应用很有用。
此示例使用Google 身份验证对用户进行身份验证。 使用 Google 身份验证将管理登录过程的许多复杂性转移到 Google。 若要与其他外部身份验证提供程序集成,请参阅以下主题:
配置
在 ConfigureServices
方法中,使用 AddAuthentication、AddCookie和 AddGoogle 方法配置应用的身份验证方案:
public void ConfigureServices(IServiceCollection services) { // requires // using Microsoft.AspNetCore.Authentication.Cookies; // using Microsoft.AspNetCore.Authentication.Google; // NuGet package Microsoft.AspNetCore.Authentication.Google services .AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme; }) .AddCookie() .AddGoogle(options => { options.ClientId = Configuration["Authentication:Google:ClientId"]; options.ClientSecret = Configuration["Authentication:Google:ClientSecret"]; }); services.AddRazorPages(); }
对的调用 AddAuthentication 设置应用程序的 DefaultScheme。 DefaultScheme
是以下 HttpContext
身份验证扩展方法使用的默认方案:
如果将应用程序的 DefaultScheme
设置为CookieAuthenticationDefaults. AuthenticationScheme ("cookie"),则会将应用程序配置为使用 cookie 作为这些扩展方法的默认方案。 如果将应用程序的 DefaultChallengeScheme 设置为GoogleDefaults. AuthenticationScheme ("Google"),则会将应用程序配置为使用 Google 作为调用 ChallengeAsync
的默认方案。 DefaultScheme``DefaultChallengeScheme
重写。 有关在设置时覆盖 DefaultScheme
的其他属性,请参阅 AuthenticationOptions。
在 Startup.Configure
中,调用 UseRouting
和 UseEndpoints
之间的 UseAuthentication
和 UseAuthorization
。 这会设置 HttpContext.User
属性,并为请求运行授权中间件:
app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });
若要详细了解身份验证方案,请参阅身份验证概念。 若要详细了解 cookie 身份验证,请参阅 使用 cookie 而无需 ASP.NET Core 标识的身份验证。
应用授权
通过将 AuthorizeAttribute
特性应用到控制器、操作或页来测试应用的身份验证配置。 以下代码将访问隐私页面的权限限制为已经过身份验证的用户:
[Authorize] public class PrivacyModel : PageModel { }
注销
若要注销当前用户并删除其 cookie,请调用SignOutAsync。 下面的代码将 Logout
页处理程序添加到索引页:
public class IndexModel : PageModel { public async Task<IActionResult> OnPostLogoutAsync() { await HttpContext.SignOutAsync(); return RedirectToPage(); } }
请注意,对 SignOutAsync
的调用未指定身份验证方案。 应用程序的 DefaultScheme
CookieAuthenticationDefaults.AuthenticationScheme
用作回退。
其他资源
ASP.NET Core 中的 Facebook、Google 和外部提供程序身份验证 介绍如何使用户能够使用 OAuth 2.0 通过外部身份验证提供程序中的凭据进行登录。 该主题中所述的方法包括 ASP.NET Core 标识作为身份验证提供程序。
此示例演示如何使用外部身份验证提供程序,而无需ASP.NET Core 标识。 这对于不需要 ASP.NET Core 标识的所有功能,但仍需要与受信任的外部身份验证提供程序集成的应用很有用。
此示例使用Google 身份验证对用户进行身份验证。 使用 Google 身份验证将管理登录过程的许多复杂性转移到 Google。 若要与其他外部身份验证提供程序集成,请参阅以下主题:
配置
在 ConfigureServices
方法中,使用 AddAuthentication
、AddCookie
和 AddGoogle
方法配置应用的身份验证方案:
services .AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme; }) .AddCookie() .AddGoogle(options => { options.ClientId = Configuration["Authentication:Google:ClientId"]; options.ClientSecret = Configuration["Authentication:Google:ClientSecret"]; });
对AddAuthentication的调用将设置应用的DefaultScheme。 DefaultScheme
是以下 HttpContext
身份验证扩展方法使用的默认方案:
如果将应用程序的 DefaultScheme
设置为CookieAuthenticationDefaults. AuthenticationScheme ("cookie"),则会将应用程序配置为使用 cookie 作为这些扩展方法的默认方案。 如果将应用程序的 DefaultChallengeScheme 设置为GoogleDefaults. AuthenticationScheme ("Google"),则会将应用程序配置为使用 Google 作为调用 ChallengeAsync
的默认方案。 DefaultScheme``DefaultChallengeScheme
重写。 有关在设置时覆盖 DefaultScheme
的其他属性,请参阅 AuthenticationOptions。
在 Configure
方法中,调用 UseAuthentication
方法来调用设置 HttpContext.User
属性的身份验证中间件。 在调用 UseMvcWithDefaultRoute
或 UseMvc
之前调用 UseAuthentication
方法:
app.UseAuthentication();
若要详细了解身份验证方案,请参阅身份验证概念。 若要详细了解 cookie 身份验证,请参阅 使用 cookie 而无需 ASP.NET Core 标识的身份验证。
应用授权
通过将 AuthorizeAttribute
特性应用到控制器、操作或页来测试应用的身份验证配置。 以下代码将访问隐私页面的权限限制为已经过身份验证的用户:
[Authorize] public class PrivacyModel : PageModel { }
注销
若要注销当前用户并删除其 cookie,请调用SignOutAsync。 下面的代码将 Logout
页处理程序添加到索引页:
public class IndexModel : PageModel { public async Task<IActionResult> OnPostLogoutAsync() { await HttpContext.SignOutAsync(); return RedirectToPage(); } }
请注意,对 SignOutAsync
的调用未指定身份验证方案。 应用程序的 DefaultScheme
CookieAuthenticationDefaults.AuthenticationScheme
用作回退。