ASP.NET Core 利用Cookie验证身份的示例代码

ASP.NET Core 1.x提供了通过Cookie 中间件将用户主体序列化为一个加密的Cookie,然后在后续请求中验证Cookie并从头建设主体,并将其分派给HttpContext.User属性。假如您要提供本身的登录界面和用户数据库,可以利用作为独立成果的Cookie中间件。

ASP.NET Core 2.x的一个主要变革是不再存在Cookie中间件。取而代之的是在Startup.cs文件中的Configure要领中的挪用UseAuthentication要了解添加配置HttpContext.User属性的 AuthenticationMiddleware 中间件。

添加设置
ASP.NET Core 1.x

按下列步调操纵:

在您的项目中安装Microsoft.AspNetCore.Authentication.CookiesNuGet包。此包包括Cookie中间件。

在Startup.cs文件中的Configure要领中添加下面的行,在app.UseMvc()语句之前:

app.UseCookieAuthentication(new CookieAuthenticationOptions() { AccessDeniedPath = "/Account/Forbidden/", AuthenticationScheme = "MyCookieAuthenticationScheme", AutomaticAuthenticate = true, AutomaticChallenge = true, LoginPath = "/Account/Unauthorized/" });

ASP.NET Core 2.x

按下列步调操纵:

假如不利用Microsoft.AspNetCore.All 元包,则在您的项目中安装2.0版的Microsoft.AspNetCore.Authentication.CookiesNuGet包。

在Startup.cs文件中的Configure要领中挪用UseAuthentication要领:

app.UseAuthentication();

在Startup.cs文件中的ConfigureServices要领中挪用AddAuthentication和AddCookie要领:

services.AddAuthentication("MyCookieAuthenticationScheme") .AddCookie("MyCookieAuthenticationScheme", options => { options.AccessDeniedPath = "/Account/Forbidden/"; options.LoginPath = "/Account/Unauthorized/"; });

上面的代码片断设置了以下部门或全部选项:

AccessDeniedPath - 当用户实验会见资源但没有通过任何时,这是请求会重定向的相对路径资源。

AuthenticationScheme - 这是一个已知的特定Cookie认证方案的值。当有多个Cookie验证实例,而且您想时,这就很是有用。

AutomaticAuthenticate - 此标识仅合用于ASP.NET Core 1.x。它暗示Cookie身份验证应在每个请求上运行,并实验验证和重建序列化主体。

AutomaticChallenge - 此标识仅合用于ASP.NET Core 1.x。这暗示当授权失败时,1.x Cookie认证应将欣赏器重定向到LoginPath或AccessDeniedPath。

LoginPath - 当用户实验会见资源但尚未认证时,这是请求重定向的相对路径。

其它选项包罗为Cookie认证建设的配置选项,身份验证的Cookie的名称,Cookie的域和Cookie各类安详属性。默认环境下,Cookie身份验证为其建设的任何Cookie利用适当的安详选项,譬喻:

配置HttpOnly符号以防备客户端JavaScript中会见Cookie

假如请求是通过HTTPS会见,则将Cookie限制为HTTPS

建设身份认证Cookie

要建设一个生存用户信息的cookie,您必需构建一个ClaimsPrincipal 生存您但愿序列化到Cookie中的信息。

ASP.NET Core 1.x

await HttpContext.Authentication.SignInAsync("MyCookieAuthenticationScheme", principal);

ASP.NET Core 2.x

await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal);

这将建设一个加密的Cookie并将其添加到当前响应中。在挪用SignInAsync时,必需在设置中指定的AuthenticationScheme。

顺便提一下,利用的加密方法是ASP.NET Core的系统。假如您在多台呆板长举办托管、负载均衡或利用Web集群,则需要才气利用沟通的密钥和应用措施标识符。

Signing out(登出)

要退出当前用户并删除其Cookie,请在节制器中挪用以下要领:

ASP.NET Core 1.x

await HttpContext.Authentication.SignOutAsync("MyCookieAuthenticationScheme");

ASP.NET Core 2.x

await HttpContext.SignOutAsync("MyCookieAuthenticationScheme");

处事端变革反馈

告诫: 一旦建设了认证的Cookie,它将成为独一的身份来历。纵然您在处事系统中禁用用户,Cookie身份验证也无法相识此信息,只要Cookie有效,用户仍可登录。

Cookie认证在其选项中提供了一系列事件。ValidateAsync()事件可用于拦截和重写Cookie身份验证。

可以思量在后端用户数据库中增加LastChanged列。为了在数据库变动时使Cookie无效,您应该首先在建设Cookie时添加一个LastChanged包括当前值的声明。数据库变动时,更新LastChanged例的值。

要重写ValidateAsync()事件的实现,您必需编写一个具有以下签名的要领:

Task ValidateAsync(CookieValidatePrincipalContext context);

ASP.NET Core Identity 在SecurityStampValidator实现了这一逻辑,链接地点。示譬喻下所示:

ASP.NET Core 1.x

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxzg.html