34-Cookie-based认证实现

匿名 (未验证) 提交于 2019-12-03 00:42:01

新建MVC项目,然后用VSCode打开

dotnet new mvc --name MvcCookieAuthSample

在Controllers文件夹下新建AdminController.cs

using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using MvcCookieAuthSample.Models;  namespace MvcCookieAuthSample.Controllers {     public class AdminController : Controller     {         public IActionResult Index()         {             return View();         }     } }

在Views文件夹下新建Admin文件夹,并在Admin文件夹下新建Index.cshtml

@{     ViewData["Title"] = "Admin"; } <h2>@ViewData["Title"]</h2>  <p>Admin Page</p>

Cookie-based认证实现

在AdminController中添加引用

using Microsoft.AspNetCore.Authorization;

然后我们可以给AdminController添加 [Authorize] 标签

using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies;

然后在Startup方法中进行cookie的依赖注入

   services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)                 .AddCookie(options=>{//自定义登陆地址,不配置的话则默认为http://localhost:5000/Account/Login                     options.LoginPath="/Account/MyLogin";                 });

然后我们要在Configure方法中把cookie中间件也添加进来,否则认证授权是不会生效的

app.UseAuthentication(); 

  这时候我们再运行一下:

发现已经自动跳转到登陆地址了。

然后添加引用

using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authentication.Cookies; using System.Security.Claims;

添加两个API用于登陆和登出

//登陆         public IActionResult MakeLogin()         {             var claims=new List<Claim>(){                 new Claim(ClaimTypes.Name,"wangyuting"),                 new Claim(ClaimTypes.Role,"admin")              };             //必须要加CookieAuthenticationDefaults.AuthenticationScheme,不然无法解析             var claimsIdentity=new ClaimsIdentity(claims,CookieAuthenticationDefaults.AuthenticationScheme);              HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,new ClaimsPrincipal(claimsIdentity));             return Ok();         }          //登出         public IActionResult Logout()         {             HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);              return Ok();         }

访问http://localhost:5000/admin会跳转到http://localhost:5000/Account/MyLogin?ReturnUrl=%2Fadmin页面

然后我们访问http://localhost:5000/Account/MakeLogin模拟登陆,然后再访问http://localhost:5000/admin

最后访问http://localhost:5000/Account/logout登出,然后再访问http://localhost:5000/admin发现又跳转到我们自定义的登陆页面。

原文:https://www.cnblogs.com/qinzb/p/9346642.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!