使用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,一经查实,立即删除!

相关文章

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

全世界只有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.控制语句 实…

使用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…

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…

跪着看完这14个机械动图

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

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…

这种秀恩爱你见过吗?

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

Layui宣布下线,不自禁的感叹一下,回忆啊

简单唠唠 其实对于前端的信息好久没关注了&#xff0c;一堆后端的Bug要撸&#xff0c;实在没有时间&#xff1b;由于浏览器收藏的东西比较多&#xff0c;于是就想抽点时间归归类&#xff0c;方便查询信息&#xff1b;趁这个机会就挨个点进去瞅一遍&#xff08;随便摸摸鱼&#…

《C语言及程序设计》程序填空——字符数组与字符串处理

返回&#xff1a;贺老师课程教学链接 1、编写一函数&#xff0c;由实参传来一个字符串&#xff0c;统计此字符串中字母、数字、空格和其它字符的个数&#xff0c;在主函数中输入字符串以及输出上述的结果。请将下面的程序补充完整。#include<stdio.h> #include<string…

csv文件设置每个cell大小_Python对文本文件和Excel的处理机制

有头发且有趣的码农万里挑一~ 96有料叔 | 一位有故事的程序猿读取文件内容的方式直接一次性读取文件内容按行读取文件内容将读取的文件内容形成一个列表直接一次性读取文件内容open()需要手动释放资源&#xff0c;最后使用close()with open() as…使用with … as…&#xff0c;…

idea2020.2.2怎么创建web项目_创建Vue3.0的项目

1. 查看Vue的环境版本Vue -V如果版本低于4.0&#xff0c;则需要升级Vue的版本npm install -g vue/cli2. 创建Vue 3.0的项目3. VS Code 的环境配置安装Extension&#xff1a;ESLint&#xff0c; Vetur。VS Code基于ESLint的Auto Save功能&#xff0c;可以很好的格式化代码&#…

揭秘奢侈品代工厂内幕:千元以上的大牌墨镜,成本甚至不过百!

▲ 点击查看纵观全球没有哪个国家像中国这样几乎所有领域都在发力世界能研发高铁的国家&#xff0c;不超过十个&#xff0c;中国在列&#xff1b;世界能建造军舰的国家&#xff0c;不超过十个&#xff0c;中国在列&#xff1b;世界能研发第五代隐身战机的国家&#xff0c;不超过…

Dapr牵手.NET学习笔记:状态管理进阶(一)

在上一篇文章中说到&#xff0c;dapr默认的状态是不可能跨appid的&#xff0c;也就是只能在相同的应用内访问自己设置的状态数据&#xff0c;dapr支持三种状态的共享配置&#xff1a;appid&#xff0c;nam&#xff0c;none&#xff0c;是通过修改components下的statestore.yaml…

ext 浅谈类的实例

打开ext的API&#xff0c;如下找到Class这个选项将鼠标移到config那里可以看到有以下属性&#xff1a;好了&#xff0c;让我们开始进入主题&#xff1a;首先&#xff0c;来讲讲如何自定义一个类&#xff0c;在ext中&#xff0c;创建一个类其实与其他语言差不多&#xff0c;只是…

构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...

虚基类及其派生类构造函数[1]建立对象时所指定的类称为最远派生类。虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。在整个继承结构中&#xff0c;直接或间接继承虚基类的所有派生类&#xff0c;都必须在构造函数的成员初始化表中为虚基类的构造函…

打得了橄榄球大联盟,进得了麻省理工,无论是四肢还是头脑都同样发达,这才叫猛男!...

全世界只有3.14 % 的人关注了爆炸吧知识今天小天就介绍一位同样在学术界、体坛都很生猛的猛男吧约翰尤索 (John Urschel) 关于约翰尤索一直有“学霸”“学神”这些词伴随着他然而尤索却说他从来都没认真听过老师讲课尤索出生在加拿大温尼伯父亲是医生&#xff0c;母亲是律师很小…

加菲猫语录,只准笑不准学

&#xff0d;今天我要做俯卧撑今天先俯卧&#xff0c;明天再撑。 &#xff0d;&#xff0d;真不愿意起来&#xff0c;尤其我还病了&#xff0c;可我还得带病坚持吃饭。 &#xff0d;&#xff0d;肚子大不可怕&#xff0c;可怕的是肚子里没有好东西。或者说&#xff0c;没有好…

python 什么是原类_Python 什么是元类(metaclasses)?

1.什么是类 在理解元类之前&#xff0c;我们必须先掌握Python中的类(class)。 和大多数语言一样&#xff0c;Python中的类知识用来描述如何“生成一个对象”&#xff1a;但是&#xff0c;在Python中&#xff0c;类不仅能用来描述如何生成一个对象&#xff0c;类本身也是对象。 …