前言

用户模块几乎是每个系统必备的基础功能,如果每次开发一个新项目时都要做个用户模块,确实非常无聊。好在asp.net core给我们提供了Identity,使用起来也是比较方便,如果对用户这块需求不是非常个性化的话,identity是一个不错的选择。

ASP.NET Core Identity:

  • 是一个 API,它支持用户 登录功能(UI界面) 。

  • 管理用户、密码、配置文件数据、角色、声明、令牌、电子邮件确认等。

Web API中集成Identity

identity是支持UI界面的,如果不是前后端分离项目,可以直接集成identity UI模块,因为我这里使用Web API,就忽略掉identity UI部分。

安装相关包

下面介绍以最小化方式引入identity。

首先创建一个Web API空项目,NuGet安装identity、efcore、jwt相关包,数据库我这里就使用Sqlite:

<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.10" />

自定义User,Context

创建自己的User实体,继承IdentityUserIdentityUser中已经有一些基础字段,你可以在你的AppUser中额外定义一些自己需要的字段,比如Address

public class AppUser : IdentityUser
{[Required] [StringLength(128)] public string Address { get; set; }
}

创建自己的DbContext,继承IdentityDbContext<>,泛型传入自己的AppUser

public class AppDbContext : IdentityDbContext<AppUser>
{public AppDbContext(DbContextOptions<AppDbContext> options): base(options){}
}

在Startup中配置服务:

public void ConfigureServices(IServiceCollection services)
{services.AddControllers();services.AddDbContext<AppDbContext>(options =>options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")));services.AddIdentityCore<AppUser>().AddEntityFrameworkStores<AppDbContext>();
}

appsettings.json:

"ConnectionStrings": {"DefaultConnection": "DataSource=app.db; Cache=Shared"
}

这样一个最简单的自定义配置就完成了。

数据库迁移

使用dotnet ef命令迁移:

dotnet ef migrations add AppDbContext_Initialdotnet ef database update

执行完成后已经生成了identity相关表:

修改主键类型/表名

identity用户,角色表的主键默认类型是string,默认值是Guid.NewGuid().ToString(),数据量不大时无所谓,否则可能存在性能问题。identity支持主键类型的修改;想要修改表名,修改字段长度等等,也是非常容易:

public class AppUser : IdentityUser<int>
{[Required] [StringLength(128)] public string Address { get; set; }
}
public class AppDbContext : IdentityDbContext<AppUser, IdentityRole<int>, int>
{public AppDbContext(DbContextOptions<AppDbContext> options): base(options){}protected override void OnModelCreating(ModelBuilder builder){base.OnModelCreating(builder);builder.Entity<AppUser>(b => { b.ToTable("AppUsers"); });builder.Entity<IdentityUserClaim<int>>(b => { b.ToTable("AppUserClaims"); });builder.Entity<IdentityUserLogin<int>>(b => { b.ToTable("AppUserLogins"); });builder.Entity<IdentityUserToken<int>>(b => { b.ToTable("AppUserTokens"); });builder.Entity<IdentityRole<int>>(b => { b.ToTable("AppRoles"); });builder.Entity<IdentityRoleClaim<int>>(b => { b.ToTable("AppRoleClaims"); });builder.Entity<IdentityUserRole<int>>(b => { b.ToTable("AppUserRoles"); });}
}

修改完成后更新数据库:

dotnet ef migrations add AppDbContext_Modify_PK_Typedotnet ef database update

查看主键,表名已成功修改:

最后

本篇完成了identity的基本配置,下一篇将介绍如何使用identity完成用户注册登录,以及获取jwt token。

参考:

ASP.NET Core 简介 Identity | Microsoft Docs[1]

Mohamad Lawand - DEV Community[2]

参考资料

[1]

ASP.NET Core 简介 Identity | Microsoft Docs: https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/identity?view=aspnetcore-5.0&tabs=visual-studio

[2]

Mohamad Lawand - DEV Community: https://dev.to/moe23/comments

使用identity+jwt保护你的webapi(一)——identity基础配置相关推荐

  1. 使用identity+jwt保护你的webapi(三)——refresh token

    前言 上一篇已经介绍了identity的注册,登录,获取jwt token,本篇来完成refresh token. 开始 开始之前先说明一下为什么需要refresh token. 虽然jwt toke ...

  2. 使用identity+jwt保护你的webapi(二)——获取jwt token

    前言 上一篇已经介绍了identity在web api中的基本配置,本篇来完成用户的注册,登录,获取jwt token. 开始 开始之前先配置一下jwt相关服务. 配置JWT 首先NuGet安装包: ...

  3. 《深入理解 Spring Cloud 与微服务构建》第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统

    <深入理解 Spring Cloud 与微服务构建>第十八章 使用 Spring Security OAuth2 和 JWT 保护微服务系统 文章目录 <深入理解 Spring Cl ...

  4. jwt配置 restful_SpringBoot实现JWT保护前后端分离RESTful API

    本文将用不到100行Java代码, 教你如何在Spring Boot里面用JWT保护RESTful api. 登录前 登录之后即可得到正确结果 登陆后 1. 什么是JWT 了解JWT的同学可以跳过这一 ...

  5. chrome charset使用_使用JWT保护你的Spring Boot应用 Spring Security实战

    关键词 Spring Boot.OAuth 2.0.JWT.Spring Security.SSO.UAA 写在前面 最近安静下来,重新学习一些东西,最近一年几乎没写过代码.整天疲于奔命的日子终于结束 ...

  6. 使用JWT保护你的Spring Boot应用 - Spring Security实战

    使用JWT保护你的Spring Boot应用 - Spring Security实战 作者 freewolf 原创文章转载请标明出处 关键词 Spring Boot.OAuth 2.0.JWT.Spr ...

  7. 使用Spring Security Oauth2 和 JWT保护微服务--Uaa授权服务器的编写

    学习自深入理解微服务 采用Spring Security OAuth2 和 JWT的方式,Uaa服务只需要验证一次,返回JWT.返回的JWT包含了用户的所有信息,包括权限信息 从三个方面讲解: JWT ...

  8. 【ASP.NET Identity系列教程(三)】Identity高级技术

    注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  9. .NET core3.0 使用Jwt保护api

    摘要: 本文演示如何向有效用户提供jwt,以及如何在webapi中使用该token通过JwtBearerMiddleware中间件对用户进行身份认证. 认证和授权区别? 首先我们要弄清楚认证(Auth ...

最新文章

  1. 面试题整理9 连续子数组的最大和
  2. java一次查询900w数据_一次SQL查询优化原理分析(900W+数据,从17s到300ms)
  3. java开源框架有哪些_java web开发框架有哪些
  4. oracle备份慢,诊断Oracle RMAN备份慢的原因
  5. GDCM:gdcm::System的测试程序
  6. (转)在ios android设备上使用 Protobuf (使用dll方式)
  7. 95-240-052-原理-State-MemoryStateBackend
  8. python爬微信头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法
  9. IS-IS详解(十一)——IS-IS 区域间防路由环路和次优路径
  10. 主键和外键(MySQL)
  11. 淘宝中的一些基本CSS代码
  12. 新型电话诈骗手法“明天到我办公室来一下”全揭秘
  13. Pytorch3D环境血泪安装史
  14. 小米 无线 linux 鼠标,便捷好用的小米无线鼠标,据说用完一键退回就离不开了...
  15. HotKey学习总结
  16. ubuntu16 octomap安装(解决安装octomap后没有octovis问题)
  17. java微信平台验证票据
  18. RabbitMQ第五个实操小案例——主题交换机(TopicExchange)
  19. 环形电流计算公式_环形电流的磁场分布 怎么计算
  20. windows用python读取文件open()函数

热门文章

  1. Entity Framework 批量插入
  2. radio切换控制div显示_JavaScript连载31图片动态切换以及关闭图片案例
  3. mysql之union合并查询
  4. spring boot中servlet启动原理
  5. 《Java多线程编程核心技术》读后感(十五)
  6. diff和patch工具使用(转)
  7. Linux操作系统下Sudo命令的使用方法说明
  8. dropbox mac_如何在Windows或Mac上启动时阻止Dropbox打开
  9. 火狐查cookie_Firefox 65默认会阻止跟踪Cookie
  10. chrome 固定缩放比例_您如何调整Google Chrome浏览器的用户界面缩放比例?