本文基于asp.net core mvc(.net6)的项目。

配置

在Program.cs类中
1、添加 AddAuthentication 和 AddCookie 方法的身份验证中间件服务

var builder = WebApplication.CreateBuilder(args);//身份验证,设置身份验证方式为 Cookie 验证(网页应用程序只适合用 cookie)
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme//默认身份验证方案
).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{options.LoginPath = "/Login/Index";//如果没有找到用户信息,就跳转到指定的actionoptions.AccessDeniedPath = "/Books/Index";//不被允许访问的地址(角色权限不足),跳转到该地址
});

2、启用身份验证,注意位置是在app.UseRouting(); 和 app.UseAuthorization();之间

app.UseAuthentication();

控制器

1.新建一个控制器,添加以下引用

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

2.登入

[HttpPost]public async Task<IActionResult> Index(string name, string pwd){var user = _context.Users.FirstOrDefault(u => u.Name == name && u.Pwd == pwd);if (user != null){List<Claim> claims = new(){//特别注意这一行,如果不设置那么 HttpContext.User.Identity.Name 将为 null new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),//用户唯一标识new Claim(ClaimTypes.Name, user.Name),//用户名new Claim(ClaimTypes.Role,user.Jurisdiction.ToString()),//用户角色,可用于权限管理//下面这几行随意,根据需要添加new Claim("UserName", user.Name)};ClaimsPrincipal principal = new(new ClaimsIdentity(claims, "User"));HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, new AuthenticationProperties{ExpiresUtc = DateTime.UtcNow.AddMinutes(30),//过期时间:30分钟}).Wait();var userInfo = HttpContext.User;return base.Redirect("/Books/Index");}else{ViewBag.Msg = "用户名或密码错误";}return await Task.FromResult<IActionResult>(View());}

3.登出

public async Task<IActionResult> Logout(){await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);return RedirectToAction("", "");//重定向的地址}

添加标记

1、去你需要授权的控制器前加上标签[Authorize]

如图所示可以放在整个控制器前面,这样整个控制器的内容都需要登陆后才能访问,也可放在第二个箭头index方法前面,那样就是只控制那一个方法所在的页面。
2、除了登录授权之外还可进行权限控制,如下图所示添加[Authorize(Roles =“0”)],这样所登录用户的角色权限不够时也是不能访问该控制器所属页面的。

视图页使用claims里所存储的值:@User.FindFirstValue(“UserName”)

收集资料学习过程中认识了Claims认证、ASP.NETIdentity验证、ABP框架,感兴趣的伙伴也可以搜索一下加深了解,有错误或不足之处还望指出。

ASP.NET身份验证和授权,使用cookie和Claims认证相关推荐

  1. Asp.net 身份验证、授权概述

    [本周]如约而至;时间是争取来的,这回的[本周]是把若干零碎的时间利用起来成文的,完成对Asp.net身份验证.访问授权等内容的梳理,可能漏掉的东西会比较多,漏掉的还是希望大家来补充.顺便说一下上次[ ...

  2. 说说Asp.net 身份验证、授权

    观其大略: 1.       Asp.net 是依存于 IIS 的一个服务,说到 Asp.net 的安全相关的话题当然要有一个整体上的思路: IIS 接收 - > IIS 验证 - > I ...

  3. 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第1部分

    目录 介绍 JWT(JSON Web令牌) ASP.NET Core中的JWToken配置 用户模型类 创建令牌 第1步 第2步 第4步 令牌存储 中间件 自定义中间件app.Use() 中间件app ...

  4. 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第2部分

    目录 介绍 用户角色 如何创建自定义授权特性? AuthorizeAttribute AuthorizeFilter 如何在控制器和操作方法级别设置权限? 检查用户权限的扩展方法 如何在操作方法(内联 ...

  5. ASP.NET Web API身份验证和授权

    英语原文地址:http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-a ...

  6. ASP.NET身份验证——Form身份认证

    细说ASP.NET Forms身份认证 用户登录是个很常见的业务需求,在ASP.NET中,这个过程被称为身份认证. 由于很常见,因此,我认为把这块内容整理出来,与大家分享应该是件有意义的事. 在开发A ...

  7. iis授权mysql验证_ASP.NET Web API身份验证和授权

    本文是作者所理解和翻译的内容. 这篇文章包括两部分:身份验证和授权. 身份验证用来确定一个用户的身份.例如,Alice用她的用户名和密码登陆系统,服务器用她的用户名和密码来确定她的身份. 授权是判断一 ...

  8. ASP.NET身份验证机制membership入门——配置篇(1){转}

    几乎所有的系统中都会使用到访问控制和角色管理这样的功能,例如:新建.修改.删除用户和角色,为用户分配角色,管理角色中的用户等等.于是MS在ASP.NET 2.0开始,实现了这些功能,使得我们在开发中, ...

  9. .NET6之MiniAPI(九):基于角色的身份验证和授权

    身份验证是这样一个过程:由用户提供凭据,然后将其与存储在操作系统.数据库.应用或资源中的凭据进行比较. 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作. 授权指判断允许用户执行 ...

  10. 【.NET框架实战】IdentityServer4身份验证、授权

    [.NET框架实战]IdentityServer4身份验证.授权 什么是身份认证 身份认证是指当客户端访问服务端资源时,验证客户端是否合法的一种机制 什么是授权 授权就是指当客户端经过身份认证后,能够 ...

最新文章

  1. 谷歌的最新NLP模型,现在能陪你从诗词歌赋谈到人生哲学
  2. 黄煦涛教授逝世:获誉华人AI视觉鼻祖、一代宗师,完美家庭楷模
  3. mysql-视图,触发器,事物,函数,存储过程
  4. WINCE基于MC8630的3G模块的控制和加载
  5. Pat乙级 1034 有理数四则运算
  6. 给asterisk写app供CLI调用
  7. eclipse+ADT 进行android应用签名详解
  8. Win11正式发布新功能
  9. jhat命令 Java Heap Analyse Tool
  10. 基于JAVA+Servlet+JSP+MYSQL的实验室机房预约管理系统
  11. MVC面试问题与答案
  12. 我的第一个python web开发框架(4)——数据库结构设计与创建
  13. 2021-06-27面向对象继承
  14. webservice规范及webservice框架
  15. 移动流量转赠给好友_中国移动怎么才能转赠手机流量
  16. android中实现内容搜索
  17. 【博主推荐】C#生成好看的二维码(附源码)
  18. 国内和国外DNS服务器地址 全国各地电信DNS服务器地址
  19. python求15的因数_十五道Python小案例,学会这些,Python基础已过关!
  20. UGUI优化:使用镜像图片

热门文章

  1. PyQt5 clicked和clicked[bool]信号区别
  2. 最新!中国内地高校ESI排名出炉:342所大学上榜!
  3. 软件工程之软件开发方法、软件工具和开发环境
  4. iview vue 打包图标不显示_使用vue-cli生成的项目引用iview组件库,字体图标不显示...
  5. Chrome谷歌浏览器安装与配置教程
  6. 小呆聚合支付系统是个人二维码免签约即时到账多商户支付系统v1.7文字教程
  7. 使用opencv测量点到线的距离
  8. 如何网络监测其他计算机关闭445端口,关闭445端口方法 包括XP win7和win10系统(超详细)...
  9. 关闭445端口的方法
  10. 简单的转盘抽奖html,一个很简单的H5的转盘抽奖的(主要用的是css3的属性)