一、appsettings.Json文件配置

配置JWT公用参数。

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

appsettings参数配置

二、JWTHelper自定义服务类

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

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

JWT帮助类

三、Startup配置

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

ConfigureServices配置

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

Configure配置

  1. 1 #region 注册jwt中间件
  2. 2 services.AddTransient<JWTService>();
  3. 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. ftp客户端自动同步 Windows系统简单操作ftp客户端自动同步

    服务器管理工具它是一款功能强大的服务器集成管理器,包含win系统和linux系统的批量连接,vnc客户端,ftp客户端等等实用功能.我们可以使用这款软件的ftp客户端定时上传下载的功能来进实现ftp客 ...

  2. [HarekazeCTF2019]Avatar Uploader 1 &&

    [HarekazeCTF2019]Avatar Uploader 1 这是一个文件上传的题目,但是这导体是通过满足条件来获取flag的. 他有两个函数,一个是getimagesize,还有一个是FIL ...

  3. 目标检测算法(一):R-CNN详解

    参考博文:https://blog.csdn.net/hjimce/article/details/50187029 R-CNN(Regions with CNN features)--2014年提出 ...

  4. 纯粹极简的react状态管理组件unstated

    简介 unstated是一个极简的状态管理组件 看它的简介:State so simple, it goes without saying 对比 对比redux: 更加灵活(相对的缺点是缺少规则,需要 ...

  5. Centos-显示或修改系统时间与日期-date

    date 显示或者修改系统时间与日期,只有超级用户才能用date命令设置和修改时间,普通用户只能显示时间 相关参数 -s 设置设置时间,格式为 Y-m-d H:M:S -d    对日期进行运算, + ...

  6. 一起构建Python生长土壤

    环境 环境安装 1. 解释器 Python https://www.python.org/ 2. IDE Pycharm https://www.jetbrains.com/pycharm/downl ...

  7. 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结

    053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...

  8. C++ | 继承(基类,父类,超类),(派生类,子类)

    转载:https://blog.csdn.net/Sherlock_Homles/article/details/82927515 文章参考:https://blog.csdn.net/war1111 ...

  9. C# 中的延时的方法。

    转载:https://blog.csdn.net/caixiexin/article/details/5769121 System.Threading.Thread.Sleep(2000); 其中20 ...

  10. 《C++primerplus》第4章练习题

    注:略过部分题目,修改了题设要求,实现差不多的功能 1.使用字符数组.要求用户输入姓名,等第和年龄,输出其姓名和年龄,等第降一级(即字母高一级). #include<iostream> u ...