本篇文章为大家展示了怎么在ASP。网络核心在使用饼干验证身份,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
ASP。网络核心1. x
按下列步骤操作:
在您的项目中安装Microsoft.AspNetCore.Authentication.CookiesNuGet包。此包包含Cookie中间件。
在Startup.cs文件中配置的方法中添加下面的行,在app.UseMvc()语句之前:
app.UseCookieAuthentication (new CookieAuthenticationOptions () ,,,{ ,,,,,AccessDeniedPath =,“/账户/禁止/? ,,,,,AuthenticationScheme =,“MyCookieAuthenticationScheme", ,,,,,AutomaticAuthenticate =,真的, ,,,,,AutomaticChallenge =,真的, ,,,,,LoginPath =,“/账户/授权/? ,,,});
ASP。网络核心2. x
按下列步骤操作:
如果不使用Microsoft.AspNetCore。所有元包,则在您的项目中安装2.0版的<代码> Microsoft.AspNetCore.Authentication.CookiesNuGet> 代码包。
在启动。cs文件中配置的方法中调用UseAuthentication方法:
app.UseAuthentication ();
在启动。cs文件中的ConfigureServices方法中调用AddAuthentication和AddCookie方法:
services.AddAuthentication (“MyCookieAuthenticationScheme") ,,,,,,,.AddCookie (“MyCookieAuthenticationScheme",, options =祝辞,{ ,,,,,,,,,options.AccessDeniedPath =,“/账户/禁止“;; ,,,,,,,,,options.LoginPath =,“/账户/授权/?; ,,,,,,,});
上面的代码片段配置了以下部分或全部选项:
- <李>
AccessDeniedPath——当用户尝试访问资源但没有通过任何授权策略时,这是请求会重定向的相对路径资源。
李> <李>AuthenticationScheme——这是一个已知的特定饼干认证方案的值。当有多个饼干验证实例,并且您想限制对一个实例的授权时,这就非常有用。
李> <李>AutomaticAuthenticate -此标识仅适用于ASP。网络核心1。x。它表示饼干身份验证应在每个请求上运行,并尝试验证和重建序列化主体。
李> <李>AutomaticChallenge -此标识仅适用于ASP。网络核心的1.倍。这表示当授权失败时,1。x饼干认证应将浏览器重定向到LoginPath或AccessDeniedPath。
李> <李>LoginPath——当用户尝试访问资源但尚未认证时,这是请求重定向的相对路径。
李>其它选项包括为饼干认证创建的设置选项,身份验证的饼干的名称,饼干的域和饼干各种安全属性。默认情况下,饼身份验证为其创建的任何饼干使用适当的安全选项,例如:
- <李>
设置HttpOnly标志以防止客户端JavaScript中访问饼干
李> <李>如果请求是通过HTTPS访问,则将饼干限制为HTTPS
李>创建身份认证饼干
要创建一个保存用户信息的Cookie,您必须构建一个ClaimsPrincipal保存您希望序列化到Cookie中的信息。
ASP。网络核心1。x
await HttpContext.Authentication.SignInAsync (“MyCookieAuthenticationScheme",,本金),
ASP。净酷睿2。x
await HttpContext.SignInAsync (“MyCookieAuthenticationScheme",,本金),
这将创建一个加密的饼干并将其添加到当前响应中。在调用SignInAsync时,必须在配置中指定的AuthenticationScheme。
顺便提一下,使用的加密方式是ASP。网络核心的数据保护系统。如果您在多台机器上进行托管,负载平衡或使用网络集群,则需要配置数据保护才能使用相同的密钥和应用程序标识符。
签出(登出)
要退出当前用户并删除其饼干,请在控制器中调用以下方法:
ASP。网络核心1。x
await HttpContext.Authentication.SignOutAsync (“MyCookieAuthenticationScheme");
ASP。净酷睿2。x
await HttpContext.SignOutAsync (“MyCookieAuthenticationScheme");
服务端变化反馈
警告:一旦创建了认证的饼干,它将成为唯一的身份来源。即使您在服务系统中禁用用户,饼身份验证也无法了解此信息,只要饼干有效,用户仍可登录。
饼干认证在其选项中提供了一系列事件.ValidateAsync()事件可用于拦截和重写饼干身份验证。
可以考虑在后端用户数据库中增加LastChanged列。为了在数据库更改时使饼干无效,您应该首先在创建饼干时添加一个LastChanged包含当前值的声明。数据库更改时,更新LastChanged例的值。