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

前言

用户模块几乎是每个系统必备的基础功能,如果每次开发一个新项目时都要做个用户模块,确实非常无聊。好在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相关表:

525e0347768cfd91d3a007922b12f5ee.png

修改主键类型/表名

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

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

62279898c2cb1163e62afa13c4658cef.png

最后

本篇完成了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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四大金刚 数据结构_GIS技术在气象领域应用综述

GIS技术在气象领域应用综述李丹【摘要】摘要:地理信息系统即GIS具有数据分析、图形制作、预测等多方面的功能,在气象领域当中能够对气象数据进行实时采集-处理,从而为气象数据库提供强有力的技术支持。接下来,本文围绕GIS技术在气象领域应用进行论述,望具有一定的可参考价值。【…

年轻人不能“饥渴”太久,否则……

全世界只有3.14 % 的人关注了爆炸吧知识文 / 较高端人类来源 / 较高端人类&#xff08;ID&#xff1a;xinji656&#xff09;转发到朋友圈健康生活从饮水做起本文来源于微信公众号&#xff1a;较高端人类&#xff08;ID&#xff1a;xinji656&#xff09;我们只研究那些你感兴趣的…

Redis集群(一):集群搭建

2019独角兽企业重金招聘Python工程师标准>>> 概述 这里只记录操作步骤和集群测试&#xff0c;保证快速搭建集群环境。具体原理请查阅官方文档&#xff08;中文版&#xff09;&#xff1a; http://www.redis.cn/topics/cluster-spec.html 集群容灾&#xff1a;Redis集…

python优惠券机器人_python实现机器人卡牌

介绍 这个例子主要利用turtle库实现根据输入动态展示不同机器人的图像和属性信息。 代码部分非原创只是做了些许修改和整理使得更易阅读。 图片和文件资源请访问git仓库获取&#xff1a;链接地址 涉及以下知识点&#xff1a; 1.文件读取 2.字典 3.turtle库的使用 4.控制语句 实…

php imap模块的添加

问题说明&#xff1a;由于公司需要对发邮件而被退回的邮件进行处理&#xff0c;而在最初php并没有imap.so的扩展支持&#xff0c;所以需要添加新的扩展 系统环境&#xff1a;centos5.2&#xff0c;php是采用源码安装 由于早期添加过 soap的扩展&#xff08;我采用的是重新编译的…

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

前言上一篇已经介绍了identity在web api中的基本配置&#xff0c;本篇来完成用户的注册&#xff0c;登录&#xff0c;获取jwt token。开始开始之前先配置一下jwt相关服务。配置JWT 首先NuGet安装包&#xff1a;<PackageReference Include"Microsoft.AspNetCore.Authent…

假如,绿茶婊的目标变成女生......

1 假如绿茶的目标是女生▼2 也不知道我爹今晚回去要迎接怎样的狂风暴雨▼3 这撞衫撞得有点尴尬▼4 我是一个小胖子没事玩玩小肚子▼5 看起来也不傻可能就是单纯的有猫病▼6 在严肃场合努力憋笑的我▼7 妈妈&#xff1a;叫你吃饭不吃饭&#xff01;三请四请才肯来&#x…

使用Mutex實現單一程式執行個體的注意事項(转)

相信大家都知道在.NET程式中若要實現單一程式執行個體&#xff0c;一般來說有幾種方法&#xff0c;像是去判斷是否已經有開啟的Process是相同的程式、用Mutex與Semaphore之類的技術來判斷是否程式正在開啟。但是很多網路上的文章都忽略了在用Mutex實現單一程式執行個體時&#…

docker 启动mysql root用户_Docker-Compose搭建Wordpress博客系统

环境&#xff1a;CentOS 7.5Docker 20.10.2Docker-Compose 1.25.5[rootlocalhost ~]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)[rootlocalhost ~]# docker version # Docker版本Client: Docker Engine - Community Version: 20.10.2…

理解元数据

元数据&#xff0c;metadata&#xff0c;最本质的解读&#xff1a;data about data&#xff0c;info about information. 1.&#xff08;针对dotnet&#xff09;反射是一种在运行时获取和使用元数据的技术。其本质在于元数据。对应一个程序集的描述是Assembly类&#xff0c;对应…

python函数参数类型检查_Python中实现参数类型检查的简单方法

Python是一门弱类型语言&#xff0c;很多从C/C转过来的朋友起初不是很适应。比如&#xff0c;在声明一个函数时&#xff0c;不能指定参数的类型。用C做类比&#xff0c;那就是所有参数都是void*类型&#xff01;void类型强制转换在C中被广泛地认为是个坏习惯&#xff0c;不到万…

开机的时候重新设置密linux管理员的密码

1. 在出现grub画面时&#xff0c;用上下键选中你平时启动linux的那一项&#xff0c;然后按e键2. 再次用上下键选中你平时启动linux的那一项(类似于kernel/boot/vmlinuz-2.4.18-14 ro rootLABEL/)&#xff0c;然后按e键3. 修改你现在见到的命令行&#xff0c;加入single&#xf…

跪着看完这14个机械动图

全世界只有3.14 % 的人关注了爆炸吧知识神奇的机械原理动态GIF图&#xff0c;很有意思&#xff0c;或许你能学到点什么&#xff01;↑↑时间书写机器↑↑↑↑鸡尾酒制作机↑↑↑↑移树机↑↑↑↑扔球机&#xff08;用于陪狗玩&#xff09;↑↑↑↑甜甜圈抓取机↑↑↑↑玻璃瓶加…

再来说说我喜欢的 Dotnet 5.0 C# 9

上次写完 C# 10&#xff0c;有兄弟在后台问 C# 9&#xff0c;就再开个篇写一写。C# 9&#xff0c;对应的是 Dotnet 5.0。这个出来也有些日子了&#xff0c;不过好像群里很多人还是没往这个版本走。我这边现在是全线已经转向了 5.0&#xff0c;还是我经常说的那个原因&#xff1…

《C语言及程序设计》实践参考——当年第几天(数组方案)

返回&#xff1a;贺老师课程教学链接 项目要求 【项目3-当年第几天(数组方案)】 当年第几天中定义一个函数&#xff0c;其参数为年、月、日的值&#xff0c;返回这一天为该年的第几天。要求在main函数中输入年月日&#xff0c;然后调用这个函数求值&#xff0c;并在main函数中…

开发与研发(转)

按&#xff1a;这几天我一直在写这篇东西&#xff0c;本来是胸有成竹&#xff0c;没想到后来越写越发现自己在这个题目下有太多话想说&#xff0c;而以我现在的能力又不能很好地概括总结&#xff0c;以至于越写越长&#xff0c;文章结构也变得混乱&#xff0c;到后来修改的时候…

java和python哪个学习编程_初学编程,选Java还是Python?

从岗位需求量的角度目前Java仍然是最火的编程语言&#xff0c;在编程语言排行榜中Java常年稳居第一&#xff0c;和他不相上下的C语言&#xff0c;是面向过程的编程语言&#xff0c;简言之面向过程的语言适合于那些有强大数学基础、逻辑学基础的人。如果你学编程的目的是打算上班…

sql 百分数_SQL经典50题笔记

SQL语句执行顺序(8) SELECT (9)DISTINCT<Select_list> (1) FROM <left_table> (3) <join_type>JOIN<right_table> (2) ON<join_condition> (4) WHERE<where_condition> (5) GROUP BY<group_by_list> (6) WITH {CUBE|ROLLUP} (7) HAV…

Android 横竖屏切换的处理 (转载)

Android 中&#xff0c;缺省情况下屏幕的切换动会销毁当前的Activity&#xff0c;并且重启Activity。当然这种缺省的处理方式可能不符合我们的要求。 可以有多种选择改变这种处理方式。 一种方式是在销毁Activity前保存数据&#xff0c;在Activity再次Create的时候载入配置。on…

这种秀恩爱你见过吗?

1 棒棒哒&#xff0c;做的好2 程序员的日常3 一群单身鱼都看呆了4 最佳COS5 自拍达喵6 为什么你们能长这么大&#xff1f;懵逼了7 请用一个词形容这张图你点的每个赞&#xff0c;我都认真当成了喜欢