一、appsettings.Json文件配置

配置JWT公用参数。

1 /*JWT设置*/
2 "JwtSetting": {
3 "Issuer": "http://www.xxxx.cn:8080/", //颁发者
4 "Audience": "http://www.xxxx.cn:8080/", //可以给哪些客户端使用
5 "SecretKey": "8B6E0B32BE822E4144315F05E7825150" //秘钥
6 },

appsettings参数配置

二、JWTHelper自定义服务类

这部分代码主要是为了生存Token,以及解析加密的当前接口调用用户id

 1 public class JWTService
2 {
3 #region 依赖注入
4 private readonly IConfiguration _configuration;
5
6 public JWTService(IConfiguration configuration)
7 {
8 _configuration = configuration;
9 }
10 #endregion
11
12 #region 方法
13 /// <summary>
14 /// 获取UserId
15 /// </summary>
16 /// <param name="UserId"></param>
17 /// <returns></returns>
18 public string GetToken(string UserId)
19 {
20 //相关Token的常量
21 var claims = new[]
22 {
23 new Claim(ClaimTypes.SerialNumber, UserId)
24 };
25
26 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtSetting:SecretKey"]));
27 var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
28
29 //JWT规定的部分字段
30 var token = new JwtSecurityToken(
31 issuer: _configuration["JwtSetting:Issuer"],//提供者
32 audience: _configuration["JwtSetting:Audience"],//被授权者
33 claims: claims,
34 expires: DateTime.Now.AddHours(24),//过期时间
35 signingCredentials: creds
36 );
37
38 string Token = new JwtSecurityTokenHandler().WriteToken(token);
39 return Token;
40 }
41
42 /// <summary>
43 /// 获取当前登录用户ID
44 /// </summary>
45 /// <param name="User"></param>
46 /// <returns></returns>
47 public string GetCurrentUserId(ClaimsPrincipal User)
48 {
49 return User.Claims.SingleOrDefault(t => t.Type == ClaimTypes.SerialNumber).Value;
50 }
51 #endregion
52 }

JWT帮助类

三、Startup配置

 1 #region JWT配置
2 services.AddAuthentication(options => {
3 //认证middleware配置
4 options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
5 options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
6 })
7 .AddJwtBearer(options => {
8 //主要是jwt token参数设置
9 options.TokenValidationParameters = new TokenValidationParameters {
10 //颁发者
11 ValidateIssuer = true,
12 ValidIssuer = Configuration["JwtSetting:Issuer"],
13 //被授权者
14 ValidateAudience = true,
15 ValidAudience = Configuration["JwtSetting:Audience"],
16 //秘钥
17 ValidateIssuerSigningKey = true,
18 IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtSetting:SecretKey"])),
19 //是否验证失效时间【使用当前时间与Token的Claims中的NotBefore和Expires对比】
20 ValidateLifetime = true,
21 ClockSkew = TimeSpan.FromMinutes(5)//允许的服务器时间偏移量【5分钟】
22 };
23 });
24 #endregion;

ConfigureServices配置

1 //添加认证中间件【必须在授权前面添加】
2 app.UseAuthentication();
3 //添加授权中间件
4 app.UseAuthorization();

Configure配置

1 #region 注册jwt中间件
2 services.AddTransient<JWTService>();
3 #endregion

ConfigureServices中间件注册

四、登录调用

4.1、依赖注入

4.2、返回给前端token

五、前端处理

前端拿到后,保存在全局参数中。

六、其他接口调用

这里一并给大家展示layui.js的两种类型请求。

6.1、table表单

6.2、普通ajax请求,注意跨域,后台接口也要设置跨域问题。

6.3、请求头展示

6.4、后台方法

6.5、之后拿到验证返回标志和查询请求接口用户id,这里的User是 ClaimsPrincipal里面的User,,这里的User.Identity.IsAuthenticated是bool类型的,成功是返回true,失败返回false,但是要想知道具体是权限不够还是请求时间超时,

我还没有办法分解处理,有办法的大佬可以评论或者私信我,万分感激。之后返回给前端,前端拿到返回的401,就返回登录页面,就可以了。希望对大家有帮助。

.NET CORE WebAPI JWT身份验证的更多相关文章

  1. ASP.NET Core Web API中带有刷新令牌的JWT身份验证流程

    ASP.NET Core Web API中带有刷新令牌的JWT身份验证流程 翻译自:地址 在今年年初,我整理了有关将JWT身份验证与ASP.NET Core Web API和Angular一起使用的详 ...

  2. Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step

    翻译自 Mohamad Lawand 2021年1月22日的文章 <Asp Net Core 5 Rest API Authentication with JWT Step by Step> ...

  3. .net core webapi jwt 更为清爽的认证

    原文:.net core webapi jwt 更为清爽的认证 我的方式非主流,控制却可以更加灵活,喜欢的朋友,不妨花一点时间学习一下 jwt认证分为两部分,第一部分是加密解密,第二部分是灵活的应用于 ...

  4. .net core webapi jwt 更为清爽的认证 ,续期很简单(2)

    .net core webapi jwt 更为清爽的认证  后续:续期以及设置Token过期 续期: 续期的操作是在中间件中进行的,续期本身包括了前一个Token的过期加发放新的Token,所以在说续 ...

  5. 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权

    OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...

  6. 关于WEB Service&WCF&WebApi实现身份验证之WebApi篇

    之前先后总结并发表了关于WEB Service.WCF身份验证相关文章,如下: 关于WEB Service&WCF&WebApi实现身份验证之WEB Service篇. 关于WEB S ...

  7. ASP.NET WEBAPI 的身份验证和授权

    定义 身份验证(Authentication):确定用户是谁. 授权(Authorization):确定用户能做什么,不能做什么. 身份验证 WebApi 假定身份验证发生在宿主程序称中.对于 web ...

  8. 关于WEB Service&WCF&WebApi实现身份验证之WCF篇(2)

    因前段时间工作变动(换了新工作)及工作较忙暂时中断了该系列文章,今天难得有点空闲时间,就继续总结WCF身份验证的其它方法.前面总结了三种方法(详见:关于WEB Service&WCF& ...

  9. Spring Cloud系列-Zuul网关集成JWT身份验证

    前言 这两三年项目中一直在使用比较流行的spring cloud框架,也算有一定积累,打算有时间就整理一些干货与大家分享. 本次分享zuul网关集成jwt身份验证 业务背景 项目开发少不了身份认证,j ...

随机推荐

  1. Spring Boot 第一弹,问候一下世界!!!

    持续原创输出,点击上方蓝字关注我吧 目录 前言 什么是Spring Boot? 如何搭建一个Spring Boot项目? 第一个程序 Hello World 依赖解读 什么是配置文件? 什么是启动类? ...

  2. Mall电商实战项目发布重大更新,全面支持SpringBoot 2.3.0

    1. 前言 前面近一个月去写自己的mybatis框架了,对mybatis源码分析止步不前,此文继续前面的文章.开始分析mybatis一,二级缓存的实现. 附上自己的项目github地址:https:/ ...

  3. 永久改变cmd背景颜色

    问题描述:cmd窗口为白底黑字,用久之后想换背景颜色. 解决方法一: win+R 输入regedis进入注册表,找到 HKEY_CURRENT_USER\Software\Microsoft\Comm ...

  4. Python练习题 030:Project Euler 002:偶数斐波那契数之和

    本题来自 Project Euler 第2题:https://projecteuler.net/problem=2 # Each new term in the Fibonacci sequence ...

  5. Python练习题 018:打印星号菱形

    [Python练习题 018] 打印出如下图案(菱形): * *** ***** ******* ***** *** * --------------------------------------- ...

  6. P4454 [CQOI2018]破解D-H协议

    链接 这题并不难只是需要把题读懂 - By ShadderLeave 一句话题意 给定两个数 \(p\)和\(g\),有\(t\)组询问,每组询问给出\(A\)和\(B\) 其中 A = \(g^a ...

  7. 一、Mysql(1)

    数据库简介 人类在进化的过程中,创造了数字.文字.符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题 计算机诞生后,数据开始在计算 ...

  8. centos7下安装fabric2.2

    准备基础环境 1.安装curl.git yum install curl yum install git 2.go环境搭建 下载解压 cd /home mkdir app cd app wget ht ...

  9. 设备通讯——RS232

    RS232的接口有两种--一种公头.一种母头,两种头的引脚是有区别的 MAX232电路图: 注意:串口通讯需要交叉接线.

  10. 通用redis

    import lombok.extern.slf4j.Slf4j;import org.apache.poi.ss.formula.functions.T;import org.rcisoft.cor ...