Asp.net Core 2.0 Cookie 认证

微软提前发布了大家期待已久的.Net Core 2.0,本站长也是迫不及待地将项目更新到2.0,但是发现编译无法通过。登陆功能也有红线提醒问题,于是查看官方文档,找到问题所在,记录下来。我是用最常见的Cookie认证。Asp.net Core 2.0 Cookie 认证较之1.1版本有些改进,简化了过程。它涉及到verbs(行为), handlers, and middleware(中间件)。下图是Cookie认证、授权的流程图。

1. 在Startup.cs文件中添加下面代码,这个较之上个版本有发生变化
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
{
options.LoginPath = "/login";
});
}

2. 注册认证中间件
app.UseStaticFiles();
app.UseAuthentication();

3. 控制器登陆方法中处理
ClaimsIdentity identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
identity.AddClaim(new Claim(ClaimTypes.Email, "account.UserID", ClaimValueTypes.String));
identity.AddClaim(new Claim(ClaimTypes.Name, "account.NickName", ClaimValueTypes.String));
var properties = new AuthenticationProperties { ExpiresUtc = DateTime.UtcNow.AddMinutes(20) };
await HttpContext.SignInAsync(new ClaimsPrincipal(identity), properties);

4. 注销事件
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

以上就是登陆,注销所用到的所有核心代码,上面三个地方都用到CookieAuthenticationDefaults.AuthenticationScheme,它们需要保持一致,或者像官方文件介绍那样,使用自定义字符串,较之上个版本,代码精简了一些。
Posted by 何敏 on 2017-09-01 11:22:40