.NET 6.0 MVC使用Cookie进行身份验证

ops/2024/10/25 12:29:13/

一般而言MVC 是不与其他系统发生数据交互,所以使用Cookie验证即可,无需安装拓展。

1.Program里面注册服务

//1.选择使用那种方式来身份验证
builder.Services.AddAuthentication(option =>
{option.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; //默认身份验证方案option.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;option.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;option.DefaultForbidScheme = CookieAuthenticationDefaults.AuthenticationScheme;option.DefaultSignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, option =>
{option.LoginPath = "/Login/Login";//如果没有找到用户信息---身份验证失败--授权也失败了---就跳转到指定的Actionoption.LogoutPath = "/Login/Logout";//登出跳转option.AccessDeniedPath = "/Login/Login";//身份验证失败页面//option.Events.OnRedirectToLogin = context =>//{//    //context.Response.StatusCode = 302; // 设置302重定向状态码//    //context.Response.Headers["Location"] = "/Login/Login"; // 重定向到登录页//    //context.Response.Redirect(context.RedirectUri);//    return Task.CompletedTask;//};
});//2)在 app.UseAuthorization() 代码上添加 UseAuthentication 即 身份验证中间件,
app.UseAuthentication();//身份验证中间件,必须在前
app.UseAuthorization();//授权中间件

2.在用户登录时给添加身份(LoginModel 只是我的接收参数的类,此处改为自己的即可)

public async Task<IActionResult> LoginAction([FromBody] LoginModel model)
{
//.....身份验证逻辑
//.....
//验证成功,创建身份信息var claims = new List<Claim>()//身份验证信息
{new Claim(ClaimTypes.Name,$"{model.Account}"),//用户传过来的账号new Claim(ClaimTypes.Role,model.RoleName),用户传过来的角色,最好根据账号从数据库查询,用于授权new Claim("PassWord",model.PassWord),//用户传过来的密码new Claim("RoleId",RoleId),//可以写入任意数据
};//通过Claim来创建ClaimsIdentity 类似于通过用户的身份来创建身份证
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);var authProperties = new AuthenticationProperties
{//应该允许刷新身份验证会话。AllowRefresh = true,//身份验证票证过期的时间10分钟ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(30),//允许持久化IsPersistent = true,//cookie过期时间1天IssuedUtc = DateTime.Now.AddDays(1),重定向url地址//RedirectUri = "/Login/Login"
};//授权cookie
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);var result = new
{success = true,msg = "登录成功",//消息
};
return Json(result);
}

用户退出登录

  /// <summary>/// 退出/// </summary>/// <returns></returns>public async Task<IActionResult> Logout(){await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);return RedirectToAction("Login");}

获取用户信息:

/// <summary>
/// 获取用户信息
/// </summary>
/// <returns></returns>
//[Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
public string GetUser()
{try{if (HttpContext.User.Identity != null){if (HttpContext.User.Identity.IsAuthenticated)  //判断用户是否通过认证{string name = HttpContext.User.Claims.ToList()[0].Value;return name;}else{return "未登录";}}return "无权访问";}catch (Exception ex){return "欢迎";}
}

授权使用方法(注:三种授权方式(Policy、Role、Scheme),这里是通过角色授权):

[Authorize(Roles = "SysAdmin,UserAdmin,RoleAdmin")]//只有角色为SysAdmin,UserAdmin,RoleAdmin其中一个的可访问该控制器
public class RoleController : Controller//你的控制器
{
/// <summary>
/// 用户管理
/// </summary>
/// <returns></returns>
[Authorize(Roles = "SysAdmin,UserAdmin")]//Authorize不传参数的话代表只要验证成功就可访问控制器,容易造成垂直越权行为
public IActionResult UserManager()
{return View();
}
}


http://www.ppmy.cn/ops/117917.html

相关文章

正则表达式【详细解读】

目录 正则表达式是什么&#xff1f; 基本概念 主要用途 正则表达式的元字符 核心的元字符及其功能&#xff1a; 重复限定符: 重复限定符案例 位置匹配: 位置匹配案例 字符集与否定: 字符集与否定案例 特殊字符: 特殊字符案例 分组与引用: 分组与引用案例 前瞻与…

【刷题2—滑动窗口】最大连续1的个数lll、将x减到0的最小操作数

目录 一、最大连续1的个数lll二、将x减到0的最小操作数 一、最大连续1的个数lll 题目&#xff1a; 思路&#xff1a; 问题转换为&#xff1a;找到一个最长子数组&#xff0c;这个数组里面0的个数不能超过k个 定义一个变量count&#xff0c;来记录0的个数&#xff0c;进窗口、…

计算机视觉|机器学习中图片特征向量的提取方式:开启图像世界的钥匙

文章目录 什么是特征向量&#xff1f;常见的图片特征向量提取方法1. **手工设计的特征**SIFT&#xff08;尺度不变特征变换&#xff09;HOG&#xff08;方向梯度直方图&#xff09; 2. **卷积神经网络 (CNN)**3. **预训练模型**4. **自监督学习** 结语 今天我们将一起深入探讨机…

线程(三) 线程的互斥

文章目录 线程线程的同步和互斥线程同步线程互斥为什么要使用线程互斥什么是线程同步示例--线程操作共享资源引发问题 线程互斥--互斥锁示例--使用互斥锁来保证取款操作 互斥锁的属性示例--创建不同的属性的互斥锁后进行加锁操作 线程互斥--读写锁示例--对读写锁进行使用以观察…

前端框架对比选择:如何在众多技术中找到最适合你的

引言 在现代Web开发中&#xff0c;前端框架的选择对项目的成功与否至关重要。随着技术的不断发展&#xff0c;市面上涌现出多种前端框架&#xff0c;每种框架都有其独特的特点、优缺点以及适用场景。本文将对当前主流的前端框架进行详细对比&#xff0c;帮助开发者在选择时做出…

【C++】 vector 迭代器失效问题

【C】 vector 迭代器失效问题 一. 迭代器失效问题分析二. 对于vector可能会导致其迭代器失效的操作有&#xff1a;1. 会引起其底层空间改变的操作&#xff0c;都有可能是迭代器失效2. 指定位置元素的删除操作--erase3. Linux下&#xff0c;g编译器对迭代器失效的检测并不是非常…

搜维尔科技:使用Xsens动作捕捉系统和ai训练人形机器人模仿人类运动,执行复杂任务

人形机器人市场正在快速扩张:人形机器人市场将在未来大幅增长&#xff0c;据统计数据推算该市场将从2023年的13.2亿美元增长到2035年的约380亿美元&#xff0c;这显示出人形机器人市场强劲的增长趋势。 搜维尔科技&#xff1a;使用Xsens动作捕捉系统和ai训练人形机器人模仿人类…

Selenium自动化安装教程

‌Selenium自动化测试工具的安装教程主要包括以下几个步骤‌&#xff1a; ‌安装Python环境‌&#xff1a;Selenium需要Python环境来运行&#xff0c;因此首先需要安装Python。可以从Python官网下载适合自己操作系统的Python版本&#xff0c;并按照提示进行安装‌。 ‌安装Sele…