首页 > 其他分享 >.NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(上)

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

时间:2022-12-06 02:22:32浏览次数:51  
标签:MiniAPI 特别篇 验证 secrets Preview5 JWT user dotnet jwts

  在.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相关,它们分别拥有的命令如下图:

 

 

 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

 

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

dotnet user-jwts print d7dabed0 --show-full

  运行结果

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

 

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

 

 

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

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

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

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

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

 

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

  想要更快更方便的了解相关知识,可以关注微信公众号 

标签:MiniAPI,特别篇,验证,secrets,Preview5,JWT,user,dotnet,jwts
From: https://www.cnblogs.com/ljknlb/p/16954098.html

相关文章

  • .NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(下)
    Preview5对策略验证的方式没有改变,只不过内置了Token的生成,和《.NET6之MiniAPI(十):基于策略的身份验证和授权》的验证方式基本相同,都是生成和验证使用的验证参数要一致......
  • .NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(下)
    Preview5对策略验证的方式没有改变,只不过内置了Token的生成,和《.NET6之MiniAPI(十):基于策略的身份验证和授权》的验证方式基本相同,都是生成和验证使用的验证参数要一致......
  • .NET7之MiniAPI(特别篇) .NET Preview5参数绑定
    .NETPreview5中,给MiniAPI带来了一个参数绑定的功能,看到这个功能,我一下子就开心了,因为它提供了一个把松散的传入数据或注入功能耦合在一起的能力,并且可以根据自己的需......
  • .NET7之MiniAPI(特别篇) .NET Preview5参数绑定
    .NETPreview5中,给MiniAPI带来了一个参数绑定的功能,看到这个功能,我一下子就开心了,因为它提供了一个把松散的传入数据或注入功能耦合在一起的能力,并且可以根据自己的需......
  • MiniAPI:.NET7 Preview4之MiniAPI更新总览
    一觉醒来,发现微软带来了.NET7Preview4的更新,本次更新关于MiniAPI的还不少,难以掩饰的喜悦心情,促使我尽快把这个消息分享给大家,那下来我们看一下一共带来了哪些关于MiniA......
  • .NET7之MiniAPI(特别篇):.NET7 Preview3
    .NET7的第三个预览版发布了,同样带来了miniapi的更新,这次带来了路由过滤器,与mvc版的action过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-up......
  • .NET7之MiniAPI(特别篇):.NET7 Preview3
    .NET7的第三个预览版发布了,同样带来了miniapi的更新,这次带来了路由过滤器,与mvc版的action过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-u......
  • .NET7之MiniAPI(特别篇):.NET7 Preview3
    .NET7的第三个预览版发布了,同样带来了miniapi的更新,这次带来了路由过滤器,与mvc版的action过滤器相似。具体见https://devblogs.microsoft.com/dotnet/asp-net-core-u......
  • .NET6之MiniAPI(二十六):封装Dapper
    在上一篇说过,Dapper是通过扩展IDbConnection来达到实现的,那带来的一个问题就是隔离性不好,比如在做单元测试时,mock就有点困难,所以在实践中,我对Dapper作了扩展,下面分享出......
  • .NET6之MiniAPI(二十六):封装Dapper
    在上一篇说过,Dapper是通过扩展IDbConnection来达到实现的,那带来的一个问题就是隔离性不好,比如在做单元测试时,mock就有点困难,所以在实践中,我对Dapper作了扩展,下面分享出......