一、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. 类加载器ClassLoader

    上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...

  2. Java多线程--公平锁与非公平锁

    上一篇文章介绍了AQS的基本原理,它其实就是一个并发包的基础组件,用来实现各种锁,各种同步组件的.它包含了state变量.加锁线程.等待队列等并发中的核心组件,现在我们来看一下多线程获取锁的顺序问题. ...

  3. 【Flutter 实战】大量复杂数据持久化

    老孟导读:上一篇文章讲解了 Android 和 iOS 的文件目录系统,此篇文章讲解如何使用 SQLite 保存数据. 欢迎大家投稿:http://laomengit.com/plan/Contrib ...

  4. (转)Java中的值传递和引用传递

    Java中的值传递和引用传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?     答:是值传递.Java 编程语言只有值 ...

  5. WPF DataGrid 复合表头 (实现表头合并,自定义表头)

    功能说明: 将 DataGrid嵌套在本控件内,使用Label自定义表头,如果需要上下左右滚动 需要在控件外围添加  ScrollViewer 并且设置  ScrollVisibility 为Auto ...

  6. SpringBoot中pom引入gson异常

    在pom中引入gson依赖,启动spring boot项目中报错 Description:An attempt was made to call the method com.google.gson. ...

  7. 【转载】C/走迷宫代码

    1 #include<iostream> 2 #include<windows.h> 3 #include"GotoXY.h" 4 #include < ...

  8. Java知识系统回顾整理01基础04操作符03逻辑运算符

    一.长路与 和 短路与 无论长路与还是短路与 两边的运算单元都是布尔值 都为真时,才为真 任意为假,就为假 区别 长路与 两侧,都会被运算 短路与 只要第一个是false,第二个就不进行运算了 pub ...

  9. 【比赛记录】8.21 div2

    A 选择一个点\(B(x,0)\)使得\(|dis(A,B)-x|=k.\) 题目实际上就是找到一个最接近\(n\)的数,使得它可以分成两个数\(a,b,\)使\(a-b=k.\) 我们考虑先分成一个 ...

  10. Recursive sequence (矩阵快速幂)2016ACM/ICPC亚洲区沈阳站

    题目 Farmer John likes to play mathematics games with his N cows. Recently, they are attracted by recu ...