Model文件夹下新建三个类LoginResult,LoginRequest,AuthInfo
根据自己业务进行修改

    public class LoginResult{public bool Success { get; set; }public string Token { get; set; }public string Message { get; set; }}public class LoginRequest{public string UserName { get; set; }public string Password { get; set; }}public class AuthInfo{//模拟JWT的payloadpublic string UserName { get; set; }public List<string> Roles { get; set; }public bool IsAdmin { get; set; }/// <summary>/// 过期时间/// </summary>public string ExpirationTime { get; set; }}

用户登录方法登录方法,
将秘钥和数据用Encode进行加密,然后Return出去
Header里加入 auth:Token 值
注:每次访问必须添加

我这里为了方便测试所以用了GET

using JWT;
using JWT.Algorithms;
using JWT.Serializers;
//using JwtWebApi.Models;
using System;
using System.Collections.Generic;
using System.Web.Http;namespace DMSAPI.Controllers
{public class SignInController : ApiController{[HttpGet]public LoginResult Post(){LoginResult rs = new LoginResult();//这是是获取用户名和密码的,这里只是为了模拟AuthInfo info = new AuthInfo { UserName = "wangshibang", Roles = new List<string> { "Admin", "Manage" }, IsAdmin = true ,ExpirationTime=DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") };try{const string secret = "To Live is to change the world";//secret需要加密IJwtAlgorithm algorithm = new HMACSHA256Algorithm();IJsonSerializer serializer = new JsonNetSerializer();IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);var token = encoder.Encode(info, secret);rs.Message = "XXXXX";rs.Token = token;rs.Success = true;}catch (Exception ex){rs.Message = ex.Message;rs.Success = false;}return rs;}}}

项目下添加一个Attributes文件夹,需要写个权限拦截器,新建一个ApiAuthorizeAttribute类继承自AuthorizeAttribute类
每次
在此你可以根据你的业务来写,我这是个例子所以只是简单的加了时间控制

using DMSAPI.Models;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using System;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Controllers;namespace JwtWebApi.Attributes
{public class ApiAuthorizeAttribute : AuthorizeAttribute{protected override bool IsAuthorized(HttpActionContext actionContext){var authHeader = from t in actionContext.Request.Headers where t.Key == "auth" select t.Value.FirstOrDefault();if (authHeader != null){string token = authHeader.FirstOrDefault();if (!string.IsNullOrEmpty(token)){try{const string secret = "To Live is to change the world";//secret需要加密IJsonSerializer serializer = new JsonNetSerializer();IDateTimeProvider provider = new UtcDateTimeProvider();IJwtValidator validator = new JwtValidator(serializer, provider);IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();IJwtAlgorithm algorithm = new HMACSHA256Algorithm();IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder, algorithm);var json = decoder.DecodeToObject<AuthInfo>(token, secret, verify: true);if (json != null){if (Convert.ToDateTime(json.ExpirationTime) < DateTime.Now.AddHours(2) && !string.IsNullOrEmpty(json.ExpirationTime) ){actionContext.RequestContext.RouteData.Values.Add("auth", json);return true;}else return true;}return false;}catch (Exception ex){return false;}}}return false;}}
}

创建一个控制器可以写接下来的方法 在前面加入[ApiAuthorize],就会在拦截器里自动验证Token

        [ApiAuthorize][HttpGet]public string Get11(){AuthInfo info = RequestContext.RouteData.Values["auth"] as AuthInfo;if (info == null){return "获取不到,失败";}else{return $"获取到了,Auth的Name是 {info.UserName}";}}

转载:https://www.cnblogs.com/wangyulong/p/8727683.html
注:原文章在Token反编译时IJwtDecoder使用JWT 4.0,而我的用的JWT7.2所以传入参数有所不同

.NET JWT Token验证相关推荐

  1. go token验证_golang jwt+token验证的实现

    Token验证是验证用户身份的重要方式,在golang开发中具有广泛应用,文中主要阐述了利用jwt包加密后的token验证. 导入包: import ( "github.com/dgrija ...

  2. SpringBoot + JWT token验证

    引入JWT依赖: <!--jwt--><dependency><groupId>io.jsonwebtoken</groupId><artifac ...

  3. springboot+vue项目使用jwt token验证登录,token验证失败

    boolean result= JwtUtil.verify(token.substring(1,token.length()-1)); 验证token,可能携带了开头和结尾的双引号,只要像上面的截取 ...

  4. vue项目使用jwt token验证登录 报错token无效验证失败 【已解决】

    检查了所有代码都没有问题,在所有需要token的地方都能拿到正确的token,但是在verify时仍然走的err,打印出的错误为 invalid token 最后在外网查到有人在获取token时使用了 ...

  5. java不同项目加token访问_利用JWT实现前后端分离的Token验证

    写在前面:本篇文章的代码图片展示均使用carbon绘制,图片质量很高,如果图片过小可以点击查看原图.项目实例前端部分使用基于Angular的Ionic框架(TypeScript),使用Spring B ...

  6. .NET 6 WebApi Swagger 配置 JWT token+Authorize认证

    本篇文章简易介绍 .Net6 Weapi Jwt的认证过程,在此之前简易介绍一下jwt的常见问题 转载:JWT详解_jwt 解析_小昵称爱吃唐的博客-CSDN博客 流程可以根据下方的流程图做解析, 首 ...

  7. Django restframework之Token验证的缺陷及jwt的简单使用

    一.主要缺陷: 1.Token验证是放在一张表中,即authtoken_token中,key没有失效时间,永久有效,一旦泄露,后果不可想象,安全性极差. 2.不利于分布式部署或多个系统使用一套验证,a ...

  8. jwt token 附加用户信息_SpringBoot+JWT实现token验证并将用户信息存储到@注解内

    springboot集成jwt实现token验证 1.引入jwt依赖 io.jsonwebtoken jjwt 0.9.0 com.auth0 java-jwt 3.9.0 2.自定义两个注解 /** ...

  9. VUE+SpringBoot+JWT实现token验证,SSO单点登录

    Session的产生: 在说session是啥之前,我们先来说说为什么会出现session会话,它出现的机理是什么?我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,htpp协议是无状态的,什 ...

最新文章

  1. 《Head First Java》读书笔记(3) - 异常和IO
  2. 大战设计模式【17】—— 建造者模式
  3. django默认数据库sqlite3改为mysql
  4. pscs6插件_PS插件-灯光工厂
  5. 常用文献管理软件使用经验
  6. java与java ee_Java EE MVC:处理表单验证
  7. 如梦如幻,开源实时的天空特效算法!
  8. C语言整数与字符串相互转换
  9. 内核并发控制---RCU (来自网易)
  10. pycharm新建项目怎么选择框架_必看!心血管疾病怎么选择检查项目?
  11. linux如何敲打中文,vim敲字如弹琴 - linux-tao的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. redis 端口_「建议收藏」手把手教你搭建redis集群
  13. OSI参考模型与排错经验谈
  14. 王建林的一个亿,靠打工能实现么?
  15. python制作电子签名
  16. 数据分析图表配色大全,可视化设计走高级路线的一定要看
  17. 生活四大勤,让老人延年益寿
  18. 流浪是对另一种生活的执着
  19. 海洋cms漏洞——search.php
  20. PCI-DSS安全认证

热门文章

  1. 树形结构最优化问题:后根遍历
  2. 加载Glove预训练词向量到字典
  3. 红黑树从头至尾插入和删除结点的全程演示图
  4. 编译、汇编、翻译原理知识概括
  5. 像FIFA一样踢球的AI,比打游戏更强吗?
  6. [laravel]laravel8自动生成api文档
  7. 倒计时1天 | 大势智慧2022新品发布会全面而来!
  8. 日文个别难打的假名打法总结
  9. 买游戏来运营_游戏化思维帮你玩转社群运营
  10. 谷粒商城九商品服务之商品属性及仓储服务todo