.net6标识框架中的一些有用的概念记录
引用自:【从0开始.NET CORE认证】-1 认识认证和授权 - 寂寞空庭春欲晚 - 博客园 (cnblogs.com)
引入nuget包的作用:
- Microsoft.AspNetCore.Identity //包含AspNetCore.Identity的框架,我们可以使用里面认证授权等功能,最基础的功能
- Microsoft.AspNetCore.Identity.EntityFrameworkCore //对AspNetCore.Identity的扩展,让其可以和EF Core配合使用
- Microsoft.EntityFrameworkCore //EF Core 这个不用我多说了吧
- Microsoft.EntityFrameworkCore.SqlServer //EF Core用来连接sql server的包,如果使用mysql,最后一个换名字就行了
- Microsoft.EntityFrameworkCore.Tools //在VS 命令行里面迁移数据需要用的命令 add-migration update-database
修改或删除用户的Claim
我们添加一个可以修改用户的页面,将上次的Update.cshtml页面搬出来修改一下
修改接口:
删除接口
他们分别调用了ReplaceClaimAsync和RemoveClaimAsync。其余操作没什么差异
基于策略的授权
这个应用场景非常多,日常生活中肯定会碰到多多少少需要权限访问接口的业务。例如:公司员工信息表中,有些员工填写了出生日期,有些没有,填写的人可以访问生日福利接口,没填写的人拒绝访问。又或者说:没填写的人,但是他的职位是总经理以上级别,就可以不需要填写出生日期就可以访问这个接口。等等诸如此类的权限控制。所以我们这么做
添加一个接口,和一个页面,加上Authorize(Policy ="HasBirthDay") 就是指定一个授权策略,这个授权策略名为HasBirthDay
然后添加页面
运行:很显然,会出错,提示没有找到一个名为HasBirthDay的授权策略。
我们在Startp.cs中加入这个授权策略
代码如下
再次运行试试看:因为我们当面登录的用户中没有给与DateOfBirth的Claims所以会被强制跳转到拒绝授权的页面。
我们给当前的用户加上DateOfBirth,试试看能不能访问,在Login出增加一行Claims
运行:可以看到,成功运行小提示:请先清空浏览器的Cookies,否则还是会被拒绝的。
基于角色的授权
在.net中,有一个非常方便的授权模式就是基于角色的授权,例如,普通用户不能访问,管理员能访问,老板能访问,员工不能访问。基于角色的授权其实就是基于策略的授权的演化,本身属于策略的一部分。稍微改动一下代码,把Policy换成了Role 值从HasBirthDay改成了Boss
运行试试看,很显然,我们又被拒绝了。
我们在登录的时候增加以下代码:
运行:可以看到,成功运行小提示:请先清空浏览器的Cookies,否则还是会被拒绝的。