深入浅出 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项目


深入浅出 ASP.NET Core 基于JWT的认证和授权


我们在AdminController.cs里增加[Authorize]


深入浅出 ASP.NET Core 基于JWT的认证和授权


在Startup.cs中


深入浅出 ASP.NET Core 基于JWT的认证和授权


这时候我们访问https://localhost:5001/Admin/Index后台会跳转到Account/Login


深入浅出 ASP.NET Core 基于JWT的认证和授权


所以我们要先登陆一下:https://localhost:5001/account/login,模拟登陆,最后再访问Admin/Index就成功了,如下图:


深入浅出 ASP.NET Core 基于JWT的认证和授权


整个过程,我录个视频看下:


深入浅出 ASP.NET Core 基于JWT的认证和授权


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的机制了。


深入浅出 ASP.NET Core 基于JWT的认证和授权


关于JWT我们掌握它的Header、Payload、Signature三段部分就差不多了,如下图所示:


深入浅出 ASP.NET Core 基于JWT的认证和授权


我们看到左边的Token的是怎么来的,右边的SIGNATURE经过多重加密进行拼接,其中HEADER和PAYLOAD进行了BASE64位加密,然后+256位的Secret,外层再用SHA256进行加密。 


编码实现


接下来我们编码来实现这个认证:


1)  首先我们新建JSON配置和对应的实体映射。


深入浅出 ASP.NET Core 基于JWT的认证和授权


2) 在Starup.cs当中,我们需要引入类库


using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Text;


3) 同时在Starup.cs中,通过Bind方法进行配置和实体的绑定,然后配置JWT相关参数。如下图所示:


深入浅出 ASP.NET Core 基于JWT的认证和授权


4) 最后别忘记配置权限管道


深入浅出 ASP.NET Core 基于JWT的认证和授权


5)我们再看看加和不加Authorize的浏览器返回的区别,如下图所示:


深入浅出 ASP.NET Core 基于JWT的认证和授权



推荐阅读

(点击标题可跳转阅读)


看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

以上是关于深入浅出 ASP.NET Core 基于JWT的认证和授权的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core WebApi Jwt 基于角色的授权不起作用

ASP.Net Core Identity JWT 基于角色的身份验证被禁止

asp.net core 2.0 web api基于JWT自定义策略授权

ASP.NET Core 中的 Jwt 令牌身份验证

具有用户权限的基于 JWT 令牌的授权 Asp.net core 2.0

在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)