深入浅出 ASP.NET Core 基于JWT的认证和授权
Posted DotNet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入浅出 ASP.NET Core 基于JWT的认证和授权相关的知识,希望对你有一定的参考价值。
(给DotNet加星标,提升.Net技能)
cnblogs.com/jackyfei/p/9961099.html
Cookie-Based认证
认证流程
我们先看下传统Web端的认证流程:
以上流程很简单,有过mvc开发经验的都了如指掌,一图胜千言就不展开介绍了,下面简单演示一下实现:
编码实现
首先我们新建一个mvc项目
我们在AdminController.cs里增加[Authorize]
在Startup.cs中
这时候我们访问https://localhost:5001/Admin/Index后台会跳转到Account/Login
所以我们要先登陆一下:https://localhost:5001/account/login,模拟登陆,最后再访问Admin/Index就成功了,如下图:
整个过程,我录个视频看下:
JWT认证
简介和使用场景
Cookie-Based认证不是我们这篇文章的重点,接下来我们来看下JWT(JSON Web Token)认证,关于这个认证网上资料也非常多。
有篇不错的文章参考,这里还有一个JWT的官网(https://jwt.io/)值得关注和简书是的参考。
相对以往的文章,我会吸其精华整理后变成我系列的一部分,我知道重复是危险的,但是不去整理,似乎离系统化还是有那么一点点距离。
所以我写的这篇不是重复造轮子,我会尽可能站在您的角度,考虑阅读的舒服性,理解的便捷性。也许你会觉得简单粗暴,一看就懂,那就有那么点意义。
其实我觉得技术文章其实也可以不用长篇大论,重点是要能把简单的道理用深入浅出的方式让大家快速接受。
JWT一般用在基于RESTful API的移动端、Web端、其他端等多个终端的联合认证。和Cookie-Based认证最大的不同是,他不需要手动来重定向,API只返回标准的HTTP Code,具体有哪些Code,我们可以查看阮一峰大哥的RESTful API设计指南和RESTful API最佳实践。这里扯远了,我们看下图流程,基本就知道JWT的机制了。
关于JWT我们掌握它的Header、Payload、Signature三段部分就差不多了,如下图所示:
我们看到左边的Token的是怎么来的,右边的SIGNATURE经过多重加密进行拼接,其中HEADER和PAYLOAD进行了BASE64位加密,然后+256位的Secret,外层再用SHA256进行加密。
编码实现
接下来我们编码来实现这个认证:
1) 首先我们新建JSON配置和对应的实体映射。
2) 在Starup.cs当中,我们需要引入类库
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;
3) 同时在Starup.cs中,通过Bind方法进行配置和实体的绑定,然后配置JWT相关参数。如下图所示:
4) 最后别忘记配置权限管道
5)我们再看看加和不加Authorize的浏览器返回的区别,如下图所示:
推荐阅读
(点击标题可跳转阅读)
看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
以上是关于深入浅出 ASP.NET Core 基于JWT的认证和授权的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core WebApi Jwt 基于角色的授权不起作用
ASP.Net Core Identity JWT 基于角色的身份验证被禁止
asp.net core 2.0 web api基于JWT自定义策略授权