[Abp vNext 入坑分享] - 4.JWT授权的接入
一、感想
在写这一系列文章之前,本来以为写这个之前已经搭建好的框架描述会比较简单,但是慢慢写下来才发现。写这个真的不简单额,本来以为图文一起,一个晚上应该能输出一篇吧。。。结果:现实真的骨感,一个星期能输出两篇都不错了。。
1.之前没有写过整体系列类的文章,从高考之后就基本上没有写长篇的文章了。
2.本系列文章主要定位面向是初中级的开发可以根据步骤来搭建,高级与架构主要是相互讨论一下借鉴,所以很多东西写得很简单,基本上相当于是手把手教搭建的了
3.虽然自己之前的搭建已经完成了,但是从新来的时候好像有一些之前没有考虑到的东西又要重新考虑一下加深了理解,从第4篇开始已经慢慢到了应用的层面,虽然基于abpvnext,但是并没有完全基于。要写这些的时候又要想着怎么写得比较清晰,或者又怕自己理解不够搞错了。
4.现在大多数分享都是写demo类,像这种直接拿整个解决方案的很少,同时架构这种又是不同的team有不同的解决方案。我只能写我自己的用法,供参考吧。。
总知一句话:好难啊!!尽量坚持写完整个框架搭建吧!!
搞完之后看下要不要基于这个架构再开个持续集成的新坑:k8s,jenkins,docker之类的持续集成方面的。
唉!慢慢写吧。
二、简要说明
源码:https://github.com/lcjyslqyy/AbpVnext.Learn
由于我们在前面已经说明了,弃用id4的授权方法,因此在这里需要使用原始的jwt来做授权校验。
本篇文章则是介绍JWT的接入,并根据自己的需要定义授权失败的返回,取代原来的401状态码。关于JWT的介绍,网上很多文章已经描述得非常清晰了,我这里就不做过多的赘述了,大概是:前两段是base64,谁都可以解码的,最后一段是签名用于和服务器的key和前两段组合一个New string的签名校验;想要详细了解的请跳转:https://www.jianshu.com/p/576dbf44b2ae。
三、具体步骤
2.1 nuget在Host项目安装:Microsoft.AspNetCore.Authentication.JwtBearer
在appsettings.json里面添加:
"JwtAuth": {
"Audience": "abpvnextlearn",
"Issuer": "abpvnextlearn",
"SecurityKey": "dzehzRz9a8+8TAGbqKHP9ITdRmZdOpJWQRsFb8oz50A=",//签名的key
"TokenTime": 48
}
然后在LearnHttpApiHostModule注入AddAuthentication的授权服务,使用jwt校验的方式:如下图
则已经添加Jwt授权成功。
2.2校验一下是否是可以正常授权了,
我们先增加一个LoginController,增加Logout的方法,增加Authorize属性,如下图在这里,注意一点:所有的方法都要添加方法属性:如HttpPost,HttpGet等,不然在Swagger中是会抛出异常的。
这里我们看到swagger中有了logout的接口了,我们请求一下,接口返回了401状态码,是未授权状态的描述。这里说明我们的jwt的校验是添加成功的了。
2.3修改未授权的输出。我们定义授权失败返回{code="401",msg="无登录信息或登录信息已失效,请重新登录"},由于我们后期所有的接口都遵循返回标准,code表示返回码0为成功,msg为信息,data为数据。
因此授权失败也要统一此标准,以便前端可以进行统一判断。
需要在AddJwtBearer添加以下代码:
options.Events = new JwtBearerEvents
{
OnChallenge = context =>
{
//此处代码为终止.Net Core默认的返回类型和数据结果,这个很重要哦,必须
context.HandleResponse();
var payload = "{\"ret\":401,\"err\":\"无登录信息或登录信息已失效,请重新登录。\"}";
//自定义返回的数据类型
context.Response.ContentType = "application/json";
context.Response.StatusCode = StatusCodes.Status200OK;
context.Response.WriteAsync(payload);
return Task.FromResult(0);
}
};
再次请求如下图,表示我们替换成功了。
2.4接下来完善获取jwt的请求Login,获取jwt的流程,这里我如写一些简单的逻辑。如下图:
然后登录来获取token,如下图:
然后使用postman来校验token是否合法:
返回正常,说明授权校验已经通过了。
四、下一章介绍
定义统一的返回,与全局异常处理替换掉abpvnext原来的全局异常
[Abp vNext 入坑分享] - 4.JWT授权的接入的更多相关文章
- [Abp vNext 入坑分享] - 前言
一·背景 Abp vnext是 ABP 框架作者所发起一个完全基于 ASP .NET Core框架,截至2020年4月份已经升级到2.5.0版本,根据经验2.0版本以后可以放心的使用在生产环境.类似a ...
- [Abp vNext 入坑分享] - 6.完整接入swagger
前言 由于最近一直在修改一下排版,同时找了非技术的朋友帮忙看一下排版的问题,现在已经基本上确定了排版和样式了.更新可以恢复正常了. 作为一个写前端代码基本只写js不写css的开发,搞排版真的头疼..各 ...
- [Abp vNext 入坑分享] - 7.Automapper与validation的使用
简要说明 [项目源码] [章节目录] 本文主要介绍Automapper与Validation的使用方法.首先使用Automapper的目的是引入组件完成entity与dto之间的转换以达到简化代码的目 ...
- [Abp vNext 入坑分享] - 8.Redis与Refit的接入
前言 本章结束之后,这个abp vnext系列算是初步完结了,基础的组件都已经接入了.如果各位还需要其它的组件的话,可以自己按需要进行接入使用.其实这个只是一个基础的框架,可以自己根据需要进行变通的. ...
- [Abp vNext 入坑分享] - 1.创建初始的项目
一.简要说明 本篇文章主要是跟着官方的文档把项目安装好先,同时了解一下大概的项目结构. 二.具体步骤 2.1全局安装ABP CLI,直接在cmd中安装即可.如果你之前安装过,这里可以略过: dotne ...
- [Abp vNext 入坑分享] - 3.简单的用户模块功能开发
一.简要说明 本篇文章开始进行业务模块的开发模拟,借助user模块来进行业务开发,主要是用户相关的基础操作.主要是先使用Users来体验整个开发的流程.主要是先把一个基础流程跑顺利,在这里我并不会过于 ...
- [Abp vNext 入坑分享] - 5.全局异常替换
一.简要说明 [项目源码] [章节目录] 前面我们已经初步完成了框架的功能了,jwt的也已经接入完成了. 现在需要进行全局异常的接入了,abpvnext官方本来就有了全局异常的模块了,介绍链接 ...
- [Abp vNext 入坑分享] - 2.简化项目结构
一.简要说明 本篇文章根据我自己的需要对项目结果进行简化,让项目结构更符合我自己的要求,同时让项目跑起来.仅供参考 二.具体步骤 2.1卸载掉对我来说目前使用不上的项目,identityserver, ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 接入GitHub,用JWT保护你的API
上一篇文章(https://www.cnblogs.com/meowv/p/12924859.html)再次把Swagger的使用进行了讲解,完成了对Swagger的分组.描述和开启小绿锁以进行身份的 ...
随机推荐
- nginx IF 指令
变量名可以使用"="或"!="运算符 ~ 符号表示区分大小写字母的匹配 "~*"符号表示不区分大小写字母的匹配 "!"和 ...
- Servlet---request内置对象
Request 对象: 问题: 浏览器发起请求到服务器,会遵循HTTP协议将请求数据发送给服务器. 那么服务器接受到请求的数据改怎么存储呢?不但要存,而且要保证完成性. 解决: 使用对象进行存储,服务 ...
- Eclipse打包jar
对一个包打jar包 右键包名-Export-Jar File-选择所在包的class文件(注意),如果选择java文件会失败-然后Finish 检查jar包是否正确,使用如jd-gui这样的反编译工具 ...
- async和await是如何实现异步编程?
目录 异步编程样例 样例解析 浅谈Promise如何实现异步执行 参考 1.异步编程样例 样例: // 等待执行函数 function sleep(timeout) { return new Prom ...
- Linux基础;Day07
dns服务 dns的作用:地址解析 IP -> 域名(反向) 域名 -> IP(正向) 类型 主域名服务器 负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改. ...
- Flask 入门(八)
flask操作数据库:操作数据: 承接上文: 修改main.py中的代码如下: #encoding:utf-8 from flask_sqlalchemy import SQLAlchemy from ...
- Java基础】并发 - 多线程
Java基础]并发 - 多线程 分类: Java2014-05-03 23:56 275人阅读 评论(0) 收藏 举报 Java 目录(?)[+] 介绍 Java多线程 多线程任务执行 大多数 ...
- Mycat使用配置实践
本来写了好多,关于配置的解释和使用以及注意,但是发现有点啰嗦含金量也不高,所以直接把实际使用的一个例子放着吧,供参考. <!DOCTYPE mycat:schema SYSTEM "s ...
- C语言冒泡排序法分析及代码实现
冒泡排序法: 所谓冒泡排序法,就是对一组数字进行从大到小或者从小到大排序的一种算法.具体方法是,相邻数值两两交换.从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换( ...
- 曹工说Redis源码(6)-- redis server 主循环大体流程解析
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...