关于JWT的基本概念,如果有不清晰的同学,请点击这里,就不在这里赘述了。接下来聊聊JWT是怎么发挥作用的。

第一,安装nuget包

Microsoft.AspNetCore.Authentication.JwtBearer

第二,配置【Startup】

首先是【ConfigureServices】方法,下面要写一大堆进去

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters()
{
ValidateLifetime = true,
LifetimeValidator = (notBefore, expires, securityToken, validationParameters) =>
{
bool t = DateTime.UtcNow < expires;
return t;
}, ValidateAudience = false, ValidateIssuer = true,
ValidIssuer = jwtConfig.Issuer, ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtConfig.Key)),
};
});

虽然看起来多,实际上逻辑很清晰,我在这里简单解释一下:

RequireHttpsMetadata:获取或设置元数据地址或权限是否需要HTTPS,默认为true

SaveToken:是否将信息存储在token中

TokenValidationParameters:这部分网上有很多版本,其中大部分都是写满的,但这对新手不太友好;而且也不是必须写满。先解释一些代码里的验证开关(设置true、false的我称为验证开关)

ValidateLifetime——是否验证过期时间

ValidateAudience——是否验证被发布者

ValidateIssuer——是否验证发布者

ValidateIssuerSigningKey——是否验证签名

查看框架代码你会发现更多的验证开关,这里就不一一解释了:

然后在【Configure】添加引用:

app.UseAuthentication();
app.UseAuthorization();

这里的顺序不能颠倒。第一行是开启身份验证,第二行是开启授权。

第三,配置

JWT需要进行一些简单的配置来确保安全,至于配置写在哪里都可以,我是放在appsettings内:

  "JWT": {
"Issuer": "发布者,一般是一个域名",
"Key": "一个新的guid",
"Expires": 600(秒)
}

第四,生成JWT

为了方便大家理解,我这边直接上代码:

     public static string GetToken(IOptions<JwtConfig> _options, dynamic customer)
{
var claims = new[] {
new Claim(ClaimTypes.Name,"JWT"),
new Claim("ID",customer.ID),
new Claim("WxOpenID",customer.WxOpenID),
new Claim("Father",customer.Father)
};
        
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_options.Value.Key)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken(
issuer: _options.Value.Issuer,
claims: claims,
expires: DateTime.UtcNow.AddMinutes(_options.Value.Expires),
signingCredentials: credentials); return new JwtSecurityTokenHandler().WriteToken(token);
}

如果在token中想要携带某些参数,可以使用Claim进行封装。

接下来还有3个小步骤:

1、对配置文件中的key进行加密,得到对称加密key。

2、使用上一步得到的结果生成数字证书。

3、配置token的内容。

最后,就可以生成jwt并且返回了。

第五,获取JWT内容

正常情况下,JWT除了做验证以外,还要有一些参数做辅助。上面说了参数传递是通过定义claim实现的,那么怎么合法的解析呢?还是直接上代码:

     public static JwtInfo GetInfoFromToken(string token = null)
{
if (token is null)
return null; string tokenStr = token.Replace("Bearer ", ""); var handler = new JwtSecurityTokenHandler(); var payload = handler.ReadJwtToken(tokenStr).Payload; var claims = payload.Claims; JwtInfo info = new JwtInfo()
{
ID = claims.First(claim => claim.Type == "ID")?.Value,
WxOpenID = claims.First(claim => claim.Type == "WxOpenID")?.Value,
Father = claims.First(claim => claim.Type == "Father")?.Value
}; return info;
}

这一段没什么好讲的,对应的名字拿到对应的参数。不过如果参数不存在这里会报错,所以尽量规范一点,首位呼应。

第六,代码应用

JWT也生成了,同时也可以反向解析传递的参数了,该如何应用到代码中去呢?这里要用到特性。

为需要进行验证的控制器添加【Authorize】特性,这个控制器下的所有方法在外部调用时就都需要JWT认证才可顺利调用,否则返回401(未授权)。如果不是全部方法都需要认证,那么可以为方法添加【AllowAnonymous】特性来忽略认证限制,如图:

最后

基于JWT可以延伸出更多玩法,同学们有好的想法欢迎讨论。

.net core集成JWT(基础)的更多相关文章

  1. asp.net core 集成JWT(二)token的强制失效,基于策略模式细化api权限

    [前言] 上一篇我们介绍了什么是JWT,以及如何在asp.net core api项目中集成JWT权限认证.传送门:https://www.cnblogs.com/7tiny/p/11012035.h ...

  2. asp.net core 集成JWT(一)

    [什么是JWT] JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT ...

  3. 10分钟简单学习net core集成jwt权限认证,快速接入项目落地使用

    什么是JWT JSON Web Token(JWT)是目前最流行的跨域身份验证.分布式登录.单点登录等解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的 ...

  4. 如何简单的在 ASP.NET Core 中集成 JWT 认证?

    前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...

  5. ActiveMQ基础教程(四):.net core集成使用ActiveMQ消息队列

    接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列 这里继续说下.net core集成使用ActiveMQ.因为代码比较多,所以放到gitee上:https://gitee ...

  6. ABP官方文档翻译 6.2.1 ASP.NET Core集成

    ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Acti ...

  7. ASP.NET Core 基于JWT的认证(二)

    ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...

  8. ASP.NET Core 基于JWT的认证(一)

    ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...

  9. asp.net core集成MongoDB

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言及MongoDB的介绍 最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net ...

随机推荐

  1. Docker镜像仓库Harbor部署

    一.Harbor组件 组件 功能 harbor-adminserver 配置管理中心 harbor-db Mysql数据库 harbor-jobservice 负责镜像复制 harbor-log 记录 ...

  2. [WC 2011]最大Xor和路径

    题目大意: 给你一张n个点,m条边的无向图,每条边都有一个权值,求:1到n的路径权值和的最大值. 题解: 任意一条路径都能够由一条简单路径(任意一条),在接上若干个环构成(如果不与这条简单路径相连就走 ...

  3. SHOI 2013 【扇形面积并】

    早上考的,我打了80分的部分分,出来和同学讨论的时候真想扇自己一巴掌...... 题目描述: 给定 n 个同心的扇形,求有多少面积,被至少k 个扇形所覆盖. 输入输出格式 输入格式: 第一行是三个整数 ...

  4. vscode编写python,引用本地py文件出现红色波浪线

    前言 引用本地py文件出现红色波浪线,如下图: 原因 经过查询得知,vscode中的python插件默认使用的是pylint来做代码检查,因此需要对pylint做一些配置 解决方案 在setting. ...

  5. Nginx作为反向代理时传递客户端IP的设置方法

    因为nginx的优越性,现在越来越多的用户在生产环境中使用nginx作为前端,不管nginx在前端是做负载均衡还是只做简单的反向代理,都需要把日志转发到后端real server,以方便我们检查程序的 ...

  6. 风车签名 - 让管理APP变成一件简单的事儿

    这是一款在Mac平台下安全可控的iOS签名管理软件,旨在对签名后的APP能够完全控制,包括APP的开启或禁用.设置到期时间锁.注入第三方动态库文件.设置安装限量.修改APP名称和自定义Bundle I ...

  7. MeteoInfoLab脚本示例:SeaWiFS HDF Grid数据

    SeaWiFS HDF Grid数据读取,特别是涉及到了文件的众多属性数据的读取,数据取对数后绘图.脚本程序: #Add data file f = addfile('D:/Temp/hdf/S199 ...

  8. centos8平台:用fontconfig安装及管理字体(fc-list/fc-match/fc-cache)

    一,fc-list所属的rpm包 [root@blog ~]$ whereis fc-list fc-list: /usr/bin/fc-list /usr/share/man/man1/fc-lis ...

  9. 使用Sparse Checkout 排除跟踪Git仓库中指定的目录或文件

    应用场景 在一个大工程里包含由不同部门开发的模块时,项目的Git仓库肯定很大,造成每次Git操作相对比较耗时.因为开发人员一般只关心他们部门的模块的代码,所以完全可以排除一些他完全不需要用到的目录.这 ...

  10. WCF服务创建到发布(SqlServer版)

    在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构.该架构的项层为服务模型层. 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型. ...