ASP.NET Core自定义认证和授权搭建流程(使用JWT)

asp.net core本身就自带了认证和授权框架,其中包含了Identity框架,可以自动生成相关的数据库表结构,调用UserManager、RoleManager、SiginManager这些服务,可以自动生成SQL语句访问用户、角色等功能。但是不同的项目,业务功能不一样,Identity自动生成的表结构并不符合所有项目的业务需求,所以我不太看好使用Identity框架来搭建项目,这里总结一下使用asp.net core里面的自定义认证和授权功能来搭建项目的方法。

1、安装EF Core,配置数据库连接

EFCore访问MySQL的nuget包Pomelo.EntityFrameworkCore.MySql,在appsettings.json文件里面配置MySQL的连接字符串

"ConnectionStrings": {
   
   
    "Mysql": "server=localhost;port=3306;uid=root;pwd=123456;database=authorization_demo"
}

2、创建和配置实体类、生成表结构

这里用到了用于认证和授权的5个基础的实体类,分别代表

[Table("t_user")]
public class User
{
   
   
    [Key]
    public long Id {
   
    get; set; }

    public string UserName {
   
    get; set; }

    public string Password {
   
    get; set; }

    public string Email {
   
    get; set; }

    public List<Role> Roles {
   
    get; set; }
}

用户

[Table("t_role")]
public class Role
{
   
   
    [Key]
    public long Id {
   
    get; set; }

    public string Name {
   
    get; set; }

    public List<User> Users {
   
    get; set; }

    public List<Authority> Authoritys {
   
    get; set; }
}

角色

[Table("t_authority")]
public class Authority
{
   
   
    [Key]
    public long Id {
   
    get; set; }

	//权限码
    public string code {
   
     get; set; }
	//描述
    public string Description {
   
    get; set; }

    public List<Role> Roles {
   
    get; set; }

}

权限

[Table("t_user_role")]
public class UserRole
{
   
   
    public long UserId {
   
     get; set; }

    public long RoleId {
   
    get; set; }
}

用户与角色的中间实体类

[Table("t_role_authority")]
public class RoleAuthority
{
   
   
    public long RoleId {
   
     get; set; }

    public long AuthorityId {
   
     get; set; }
}

角色与权限的中间实体类

然后,创建数据库上下文类,配置用户与角色的多对多关系,角色与权限的多对多关系

public class ApplicationContext : DbContext
{
   
   
    public ApplicationContext(DbContextOptions options) : base(options)
    {
   
   
    }

    public DbSet<User> Users {
   
    get; set; }
    public DbSet<Role> Roles {
   
    get; set; }
    public DbSet<Authority> Authoritys {
   
    get; set; }
    public DbSet<UserRole> UserRoles {
   
    get; set; }
    public DbSet<RoleAuthority> RoleAuthoritys {
   
    get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
   
   
        modelBuilder.Entity<User>().HasMany(user => user.Roles).WithMany(role => role.Users).UsingEntity<UserRole><
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值