希望给你 3-5 分钟的碎片化学习, 可能是坐地铁, 等公交, 积少成多, 水滴石穿, 码字辛苦, 如果你吃了蛋觉得味道不错, 希望点个赞, 谢谢关注.
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) 认证, 关于这个认证网上资料也非常多. 简书上有篇不错的参考 (跳转 https://www.jianshu.com/p/1f2d6e5126cb ), 这里还有一个 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 的浏览器返回的区别, 如下图所示:
以上代码大部分是截图, 截图看起来更加顺眼, 虽然不方便复制, 如果你想看完整代码可以访问我的 GitHub 地址 https://github.com/zfeihong/jackyfei
来源: https://www.cnblogs.com/jackyfei/p/9961099.html