一.Authentication与Authorization
在一个系统中,不是所有功能都能被自由地访问的,比如有的功能需要注册用户才能访问,有的功能需要 VIP 用户才能访问。针对资源的访问限制有两个概念:Authentication 、Authorization。Authentication 可以翻译为“鉴权”或者“验证”,它用来对访问者的用户身份进行证:Authorization 可以翻译为“授权”,它用来验证访问者的用户身份是否有对资源行访问的权限。通俗来说,Authentication 是用来验证“用户是否登录成功”的,Authorizati是用来验证“用户是否有权限访问”的。Authentication 和Authorization 在中文技术社区中有很多不同的翻译方式,而且在编程的时候经常需要直接涉及这两个单词,为了强化这两个概念,本书将会直接使用这两个英文单词,而不使用它们的中文翻译。由于Authentication 和 Authorization 的拼写非常类似,因此读者可能非常容易混淆。这里教读者一个快速区分的技巧:Authorization 是用来验证“用户是否有权限访问”的,最常见的权限验证就是“用户是否拥有某个角色”,而“角色”的英文就是role,role 的首字母为r,而只有Authorization 中才包含r这个字母。
二.标识框架identity框架
大部分系统中都需要通过数据库保存用户、角色等信息,并且需要注册、登录、密码重置、角色管理等功能。ASPNET Core 提供了标识(identity)框架,它采用RBAC(role-based acc ontrol,基于角色的访问控制)策略,内置了对用户、角色等表的管理及相关的接口,从而简化了系统的开发。
三.案例
安装 .Identity框架的包
安装语句为:Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore -Version 6.0.1
User实体类
Role实体类
IdDbcontext类
在Pregrame.cs中配置
安装数据库的包Install-Package MySql.EntityFrameworkCore -Version 7.0.0-preview5
安装数据库迁移的工具包Install-Package Microsoft.EntityFrameworkCore.Tools -Version 7.0.1
然后输入语句Add-Migration Init
然后Update-Database
在数据库迁移时报这个错时
新建一个类DbContextDesignTimeFactory
四.如何使用UserManger和RoleManger
创建一个DemoController容器类