.NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(上)

在.NET7的Preview5中,优化了asp.net core中的JWT验证,不用像以前繁琐了,更重要的是带来了一组生成Token的工具,可以让开发人员或测试人员不需登录获取Token,而达到测试的目的。

创建项目

现在来看一下怎么使用,首选创建项目,/是无验证,/myhome是有验证

var builder = WebApplication.CreateBuilder(args);
builder.Authentication.AddJwtBearer();
app.MapGet("/", () => "无验证");
app.MapGet("/myhome", (ClaimsPrincipal user) => $"你好 {user.Identity?.Name},欢迎来到你的主页").RequireAuthorization();
app.Run();

用工具生成Token

本次共引入了两个工具user-secrets和user-jwts,通过名称,大家也能了解到一个是和加密相关,一个和JWT的token相关,它们分别拥有的命令如下图:

367befaa6dafbe07e2e31e45d2cdb157.png

02b4eae3f697e68e7d44f7c6c17c5369.png

1、如果在项目中第一次使用user-secrets工具,首先要初始化,可以在右击项目,用“在终端打开”,来运行命令行。

dotnet user-secrets init

命令的返回结果是:Set UserSecretsId to 'c2450184-8525-4ed7-9a82-d54c349dd4b8' for MSBuild project 'C:\myfile\Source\Repos\Asp.NetCoreExperiment\Asp.NetCoreExperiment\MiniAPI\MiniAPI7_NewJWT\MiniAPI7_NewJWT.csproj'.

同时,这个命令会在项目文件中生成UserSecretsID节点,值正是上面返回的UUID

<PropertyGroup><TargetFramework>net7.0</TargetFramework><Nullable>enable</Nullable><ImplicitUsings>enable</ImplicitUsings><LangVersion>preview</LangVersion><UserSecretsId>c2450184-8525-4ed7-9a82-d54c349dd4b8</UserSecretsId>
</PropertyGroup>

2、这时看一下secrets,结果是没有配置

dotnet user-secrets list

No secrets configured for this application.

3、如果看一下jwts,返回值如下,有Secrets,但没有jwts

dotnet user-jwts list

Project: C:\myfile\Source\Repos\Asp.NetCoreExperiment\Asp.NetCoreExperiment\MiniAPI\MiniAPI7_NewJWT\MiniAPI7_NewJWT.csproj

User Secrets ID: c2450184-8525-4ed7-9a82-d54c349dd4b8

No JWTs created yet!

4、这个时候创建一个jwt

dotnet user-jwts create

New JWT saved with ID 'd7dabed0'.

"Authentication": {"Schemes": {"Bearer": {"Audiences": ["http://localhost:5274"],"ClaimsIssuer": "dotnet-user-jwts"}}}

同时,会在C:\Users\axzxs\AppData\Roaming\Microsoft\UserSecrets生成一个secrets文件夹,里面有两个文件secrets.json和user-jwts.json,里面分别放着生成的secret信息和jwt信息。

5、这时secrets再显示一下,就会有值了

dotnet user-secrets list

返回结果:

dotnet-user-jwts:KeyMaterial = l4ynAWIVR5JKSKo5Yyr0XvOXgZ+dlBUwe3jI1st3DsY=

6、jwts list,就会有列表了

dotnet user-jwts list

09bfac17d8aa333cb3f38bd1b450a7dc.png

7、可以用jwts的print命令,显示一下token,以方便我们在测试中使用

dotnet user-jwts print d7dabed0 --show-full

94cb4de7ace232a0019198e7c49282ca.png

运行结果

运行项目,用postman测试,这个没有什么问题,返回无验证

9499e2faccebb8d44d4775a9ffb6f4ff.png

复制生成的Token,放在header中,请求myhome,这时会返回验证通过的信息,并且带有name,这个name就是当前windows用户

00c24dcdff60273ccf4f94dd4e312ef6.png

上面只是验证,那如果增加角色呢?先在项目中添加代码:

app.MapGet("/order", (ClaimsPrincipal user) => $"用户:{user.Identity?.Name},您是:{user.Claims?.Where(s => s.Type == ClaimTypes.Role).First().Value}角色,这是你的专属页").RequireAuthorization(builder =>
{builder.RequireRole("admin");
});

那带角色的token怎么生成呢?先看一下user-jwts create命令的帮助,是可以在create时加name和role的。

dotnet user-jwts create --help

1e83ea37f9baf3f72971b56f10bdf73c.png

dotnet user-jwts create --name=桂素伟 --role=admin

创建一个名字叫桂素伟,角色是admin的token。

这时,再次测试结果如下,这次name和role都是自己设置的了。

7cf602d8a1cdeaca8c4fb4233579bf4d.png

通过上面的两个例子,可以看到,通过这两组工具,可以帮我们生成token,可以直接用来测试,而不需要提前把获取tokne和权限相关的东西搞定,虽然只是一小步,也说明了.net7在进步中。

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

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

相关文章

iOS - UTI

一、UTI概念 1、什么是UTI Uniform Type Identifier&#xff0c;是字符串&#xff0c;格式标识符。 根据UTI&#xff0c;可得到相应的其他类型的格式标识符。比如public.jpeg对应于&#xff1a; A four-character file type code (an OSType) of JPEGA filename extension of .…

[转].NET 开源项目 Polly 介绍

今天介绍一个 .NET 开源库&#xff1a;Polly&#xff0c;它是支持 .NET Core 的&#xff0c;目前在 GitHub 的 Star 数量已经接近 5 千&#xff0c;它是一个强大且实用的 .NET 库。 Polly 介绍 官方对 Polly 的介绍是这样的&#xff1a; Polly is a .NET resilience and tran…

「 刘一哥GIS」CSDN专业技术博文专栏目录索引

刘一哥GIS 个人简介&#xff1a;刘一哥&#xff0c;多年研究地图学、地理信息系统、遥感、摄影测量和GPS等应用&#xff0c;精通ArcGIS等软件的应用&#xff0c;精通多门编程语言&#xff0c;擅长GIS二次开发和数据库系统开发&#xff0c;具有丰富的行业经验&#xff0c;致力于…

数据库备份需要注意的

2019独角兽企业重金招聘Python工程师标准>>> 1、PHPMYADMIN无法导出大数据表的 如果你的数据库中有上百个数据表&#xff0c;并且有很多数据表记录都超过了1G&#xff0c;还有很多INNODB数据表&#xff0c;这个时候用PHPMYADMIN导出&#xff0c;你就会发现恢复后可能…

在 .NET 6 中使用 dotnet format 格式化代码

我不得不承认&#xff0c;在 code review 的时候&#xff0c;我花费了很多时间来研究 C# 的代码格式问题&#xff0c;这是没有太大意义的工作&#xff0c;我应该专注于其他事情&#xff0c;而不是观察同事是否忘记格式化代码&#xff0c;或者是使用了其他不同规则的代码编辑器。…

dotnet-exec 0.4.0 released

dotnet-exec 0.4.0 releasedIntrodotnet-exec 是一个 C# 程序的命令行小工具&#xff0c;可以用来运行一些简单的 C# 程序而无需创建项目文件&#xff0c;而且可以自定义项目的入口方法&#xff0c;支持但不限于 Main 方法Install/Updatedotnet-exec 是一个 dotnet tool&#x…

.NET in China - What's New in .NET

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun活动介绍去年11月&#xff0c;.NET 6 的发布&#xff0c;为我们带来了 .NET 多平台应用 UI&#xff08;.NET MAUI&#xff09;。就在前不久&#xff0c;.NET MAUI 已正式发布。未来&#xff0c;作为 .NET 7 …

[转].NET 开源项目 Anet 介绍

使用 Anet 有一段时间了&#xff0c;已经在我的个人网站&#xff08;如 bookist.cc&#xff09;投入使用&#xff0c;目前没有发现什么大问题&#xff0c;所以才敢写篇文章向大家介绍。 GitHub 地址&#xff1a; https://github.com/anet-team/anet Anet 是一个 .NET Core 通用…

强烈推荐国内几款优秀的开源电商系统

一、背景需求 我玩得好的朋友刚创业&#xff0c;搞电商最一块&#xff0c;想做个全套的电商框架系统&#xff0c;希望支持公众号、小程序、H5、pc后台管理等功能&#xff0c;创业初期资金非常紧张&#xff0c;请开发人员做成本太高&#xff0c;然后就咨询我&#xff0c;有没有最…

Maui的学习之路(二)--设置

Maui的学习之路&#xff08;二&#xff09; -- 设置上一篇我们做了Maui的基本介绍&#xff0c;理论上这一篇应该会创建第一个Maui的应用&#xff0c;以便对此进行详细的评估&#xff0c;并逐步深入。如果你需要进行Maui首个应用的创建&#xff0c;那么欢迎访问.NET MAUI 创建移…

今天,Java编程周末提高班(第一期)正式结束

Java编程周末提高班&#xff08;第一期&#xff09;&#xff0c;走过了近两个月历程&#xff0c;一共同拥有68人次学生周末到老师家进行Java学习与交流。近距离的和一群年轻的学习接触&#xff0c;收获非常多&#xff0c;特别是对以后教学的改进。在学习的闲暇。大家自己做饭&a…

基本反射了解

1 package cn.wh;2 /**3 * java.lang.Class4 * author 王恒5 * time 2016年11月2日 上午10:39:256 */7 public class RedlectTest {8 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {9 …

[转]让.NET应用秒变微服务

随着近年来微服务的发展&#xff0c;许多团队开始将自己的单体应用改造为微服务。通常Java或Go的应用可以通过业界已有的微服务框架作为微服务开发和改造的底座&#xff0c;封装掉解决跨网络问题带来的复杂性。但以Chassis模式进行的微服务改造有两大问题&#xff1a;多语言框架…

WPF 使用 MAUI 的自绘制逻辑

这是一个当前还没开发完成的功能&#xff0c;准确来说连预览版也算不上的功能。我原本以为 MAUI 是无法在 WPF 上面跑的&#xff0c;然而在看完了 MAUI 整个大的设计&#xff0c;才了解到&#xff0c;原来 MAUI 是一个非常庞大的开发项目。在 MAUI 里面&#xff0c;虽然现在是正…

[转]redis 5.0.5 5分钟搭建redis集群

环境&#xff1a;centos 7 1&#xff1a;下载并安装redis ​​​​​​​$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz$ tar xzf redis-5.0.5.tar.gz$ cd redis-5.0.5$ make redis 5.0版本 集群搭建不需要我们安装ruby就可以搭建成功&#xff0c;并且redis…

Window.document对象

一、找到元素&#xff1a; docunment.getElementById("id")&#xff1b;根据id找&#xff0c;最多找一个&#xff1b; var a docunment.getElementById("id");将找到的元素放在变量中&#xff1b; docunment.getElementsByName("name")&am…

C# 读写文件从用户态切到内核态,到底是个什么流程?

一&#xff1a;背景 1. 一个很好奇的问题我们在学习 C# 的过程中&#xff0c;总会听到一个词叫做 内核态 &#xff0c;比如说用 C# 读写文件&#xff0c;会涉及到代码从 用户态 到 内核态 的切换&#xff0c;用 HttpClient 获取远端的数据&#xff0c;也会涉及到 用户态 到 内核…

【土地评价与土地管理】案例:某地区土地农业利用潜力评价

文章目录 一、确定评价单元二、拟定潜力评价系统表、确定指标权重三、指标评价四、评定潜力等级五、得出潜力评价结果一、确定评价单元 土地潜力评价单元采用地块作为评价单元,此地块是建立在土地利用现状的基础上, 综合土地的自然属性来确定,评价单元界线与土地现有界线基本…

code point,code unit

2019独角兽企业重金招聘Python工程师标准>>> 从一段API描述谈起&#xff1a; 在String的length的API中描述是这样的&#xff01; lengthpublic int length() Returns the length of this string. The length is equal to the number of 16-bit Unicode characters i…

【土地评价与土地管理】案例:兰州市榆中县农用地分等

文章目录 一、资料收集二、确定标准耕作制度、基准作物、指定作物、光温(气候生产潜力)三、划分指标区,确定分等因素及权重四、编制“指定作物-分等因素-自然质量分”记分规则表五、绘制分等因素分值图,划分分等单元六、计算农用地自然质量分七、计算自然质量等指数八、计算…