JWT学习文章:

第一篇:JWT原理

第二篇:JWT原理实现代码

第三篇:在asp.net core中的使用JWT

前两篇文章中我写了jwt的原理,并且也用原理实现了jwt的验证。如果要看前两篇文章,点击上面的连接就能够链接过去。

第二篇文章实现jwt原理时有同学就说每个成熟的框架中都有相应的jwt实现或集成。说的不错,每个主流的框架中几乎毫无例外的都集成了jwt的实现,但是我们上篇文章的重点是希望大家能够明白原理,和这些框架中实现的基本思路,如无特殊情况也没有必要自己来写。

那么这篇文章我们就来看看asp.net core中jwt如何使用!

注意,本文主要是代码,必要的文字说明我已经都在代码注释中写出来了。文末我会给出源码地址。


新建一个空的asp.net core项目:

新建一个类Const放置一些常量:

public class Const

{

    public const string SecurityKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSfLGu+kcFDcJUCV46J+SbgR0lNc2NqgCGzojQTWW9xqjuzPF3mpisvTggYZSGfBzN+88YLZYbBLrDTUMJ4nTieElbP6SHkBFu8F+7fFBi7w3UPsaAXDr2E2srQYU5ZlKAcFBoNajNWj3sfSVRoYRPdqDTj4WdJlUPSNGz0wgRrQIDAQAB";

    public const string Domain = "http://localhost:5000";

}

在Startup中向应用添加jwt验证服务:

//添加jwt验证:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)

    .AddJwtBearer(options => {

        options.TokenValidationParameters = new TokenValidationParameters

        {

            ValidateIssuer = true,//是否验证Issuer

                        ValidateAudience = true,//是否验证Audience

                        ValidateLifetime = true,//是否验证失效时间

                        ClockSkew = TimeSpan.FromSeconds(30),

            ValidateIssuerSigningKey = true,//是否验证SecurityKey

                        ValidAudience = Const.Domain,//Audience

                        ValidIssuer = Const.Domain,//Issuer,这两项和前面签发jwt的设置一致

                        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey))//拿到SecurityKey

                    };

    });

管道中添加jwt验证:

//添加jwt验证

app.UseAuthentication();

由于管道有执行顺序的特性,因此最好放在管道的开始位置。

添加登录获取token的接口:

[ApiController]

[Route("[controller]")]

public class AuthController : ControllerBase

{

    [AllowAnonymous]//指定此属性应用于的类或方法不需要授权。

    [HttpGet]

    public IActionResult Get(string userName, string pwd)

    {

        if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(pwd))

        {

            var claims = new[]

            {

                    new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") ,

                    new Claim (JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(DateTime.Now.AddMinutes(30)).ToUnixTimeSeconds()}"),

                    new Claim(ClaimTypes.Name, userName)

                };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey));

            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(

                issuer: Const.Domain,

                audience: Const.Domain,

                claims: claims,

                expires: DateTime.Now.AddMinutes(30),

                signingCredentials: creds);

            return Ok(new

            {

                token = new JwtSecurityTokenHandler().WriteToken(token)

            });

        }

        else

        {

            return BadRequest(new { message = "username or password is incorrect." });

        }

    }

}

方法中对用户名和密码的验证只是简单的验空,实际应用中会更复杂,也会与数据库中的数据比对。

接下来就是对jwt的应用了。

新建HomeController,用于验证jwt是否成功启用:

[ApiController]

[Route("[controller]")]

public class HomeController : ControllerBase

{

    [HttpGet]

    [Route("api/value1")]

    public ActionResult<IEnumerable<string>> Get()

    {

        return new string[] { "value1", "value1" };

    }

    [HttpGet]

    [Route("api/value2")]

    [Authorize]

    public ActionResult<IEnumerable<string>> Get2()

    {

        return new string[] { "value2", "value2" };

    }

}

其中Get()方法不需要验证,Get2()需要验证。

测试:

先测试Get()方法(接口名称时api/value1),因为此方法不用验证:

验证成功!!!

接下来测试Get2():

访问Get2()方法的接口名api/value2,粘贴上面获得的token到header中:

验证成功!!!

总结:至此,使用asp.net core 自带的jwt方法就完成了。

源码地址:https://gitee.com/jingboweilanGO/Demo_jwt_core.git

说明:Demo-jwt-core是本篇文章涉及到的源码,是使用asp.net core 自带的jwt方法;

     Demo-jwt-core2是上一篇文章的源码,根据jwt原理实现的代码。

jwt-在asp.net core中的使用jwt的更多相关文章

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

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

  2. ASP.NET Core 中jwt授权认证的流程原理

    目录 1,快速实现授权验证 1.1 添加 JWT 服务配置 1.2 颁发 Token 1.3 添加 API访问 2,探究授权认证中间件 2.1 实现 Token 解析 2.2 实现校验认证 1,快速实 ...

  3. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  4. [转]ASP.NET Core 中的那些认证中间件及一些重要知识点

    本文转自:http://www.qingruanit.net/c_all/article_6645.html 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系 ...

  5. 在ASP.NET Core中使用Angular2,以及与Angular2的Token base身份认证

    注:下载本文提到的完整代码示例请访问:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angu ...

  6. 在ASP.NET Core中实现一个Token base的身份认证

    注:本文提到的代码示例下载地址> How to achieve a bearer token authentication and authorization in ASP.NET Core 在 ...

  7. ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

    一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...

  8. ASP.NET Core 中的实时框架 SingalR

    目录 SignalR 是什么? 在 ASP.NET Core 中使用 SignalR 权限验证 横向扩展 源代码 参考 SignalR 是什么? ASP.NET Core SignalR 是一个开源的 ...

  9. ASP.NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库

    目录 说明 一.定义角色.API.用户 二.添加自定义事件 三.注入授权服务和中间件 三.如何设置API的授权 四.添加登录颁发 Token 五.部分说明 六.验证 说明 ASP.NET Core 3 ...

随机推荐

  1. 【BUAA_2020_软工】个人作业

    个人项目作业博客 1. 在文章开头给出教学班级和可克隆的 Github 项目地址(例子如下).(1') 项目 内容 北航2020软工 班级博客 作业要求 具体要求 项目GitHub地址 个人项目 教学 ...

  2. Shell $?获取函数返回值或者上一个命令的退出状态

    Shell $?获取函数返回值或者上一个命令的退出状态 来自:互联网 时间:2021-01-12 阅读:2 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态, ...

  3. linux查看文件的编码格式的方法 set fileencoding PYTHON

    linux查看文件的编码格式的方法 set fileencoding   乱码原因:因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp93 ...

  4. Sed常用功能个人整理

    Sed常用功能个人整理 AsdilFibrizo关注 2019.06.24 10:23:41字数 240阅读 15 Sed对1G以下的数据效率很高这里介绍一些个人在工作中遇到的sed问题 1.查找字段 ...

  5. 019.Python函数sorted,filter和推导式

    一 sorted函数 sorted(iterable,reverse=False,key=函数) 功能:排序 参数: iterable:可迭代性数据(常用:容器类型数据,range对象,迭代器) re ...

  6. Lua中的元表(metatable)、元方法(metamethod)详解

    在第一次看见这两样东西的时候,可能会觉得它很深奥,但其实很好理解,虽然实际上它可能真的很深奥.(小若:停!滚粗.) 1.知道为什么1 + 1 = 2吗? 为什么在Lua中,1+1会等于2呢?(小若:难 ...

  7. [论文阅读笔记] Community aware random walk for network embedding

    [论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...

  8. 只需5分钟!一文读懂CSS布局(二) -- flex布局

    目录 简介 基本概念 容器属性 1. flex-direction 测试代码 2. flex-wrap 3. flex-flow 4. justify-content 5. align-items 6 ...

  9. Win10 安装 Python3 (上)

    Python3 For Windows 10 installer 参考 The full installer 安装 随后可以看到,installer 在用户环境变量PATH中,添加了三项: 卸载 使用 ...

  10. RMAN-06172: no AUTOBACKUP found or specified handle is not a valid copy or piece

    问题描述:将备份集从一台主机拷贝到另外一台主机后,在通过RMAN将数据库恢复到同类机异机的时候,restore spfile一直报RMAN-06172: no AUTOBACKUP found or ...