.NET JWT Token验证
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验证相关推荐
- go token验证_golang jwt+token验证的实现
Token验证是验证用户身份的重要方式,在golang开发中具有广泛应用,文中主要阐述了利用jwt包加密后的token验证. 导入包: import ( "github.com/dgrija ...
- SpringBoot + JWT token验证
引入JWT依赖: <!--jwt--><dependency><groupId>io.jsonwebtoken</groupId><artifac ...
- springboot+vue项目使用jwt token验证登录,token验证失败
boolean result= JwtUtil.verify(token.substring(1,token.length()-1)); 验证token,可能携带了开头和结尾的双引号,只要像上面的截取 ...
- vue项目使用jwt token验证登录 报错token无效验证失败 【已解决】
检查了所有代码都没有问题,在所有需要token的地方都能拿到正确的token,但是在verify时仍然走的err,打印出的错误为 invalid token 最后在外网查到有人在获取token时使用了 ...
- java不同项目加token访问_利用JWT实现前后端分离的Token验证
写在前面:本篇文章的代码图片展示均使用carbon绘制,图片质量很高,如果图片过小可以点击查看原图.项目实例前端部分使用基于Angular的Ionic框架(TypeScript),使用Spring B ...
- .NET 6 WebApi Swagger 配置 JWT token+Authorize认证
本篇文章简易介绍 .Net6 Weapi Jwt的认证过程,在此之前简易介绍一下jwt的常见问题 转载:JWT详解_jwt 解析_小昵称爱吃唐的博客-CSDN博客 流程可以根据下方的流程图做解析, 首 ...
- Django restframework之Token验证的缺陷及jwt的简单使用
一.主要缺陷: 1.Token验证是放在一张表中,即authtoken_token中,key没有失效时间,永久有效,一旦泄露,后果不可想象,安全性极差. 2.不利于分布式部署或多个系统使用一套验证,a ...
- jwt token 附加用户信息_SpringBoot+JWT实现token验证并将用户信息存储到@注解内
springboot集成jwt实现token验证 1.引入jwt依赖 io.jsonwebtoken jjwt 0.9.0 com.auth0 java-jwt 3.9.0 2.自定义两个注解 /** ...
- VUE+SpringBoot+JWT实现token验证,SSO单点登录
Session的产生: 在说session是啥之前,我们先来说说为什么会出现session会话,它出现的机理是什么?我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,htpp协议是无状态的,什 ...
最新文章
- 《Head First Java》读书笔记(3) - 异常和IO
- 大战设计模式【17】—— 建造者模式
- django默认数据库sqlite3改为mysql
- pscs6插件_PS插件-灯光工厂
- 常用文献管理软件使用经验
- java与java ee_Java EE MVC:处理表单验证
- 如梦如幻,开源实时的天空特效算法!
- C语言整数与字符串相互转换
- 内核并发控制---RCU (来自网易)
- pycharm新建项目怎么选择框架_必看!心血管疾病怎么选择检查项目?
- linux如何敲打中文,vim敲字如弹琴 - linux-tao的个人空间 - OSCHINA - 中文开源技术交流社区...
- redis 端口_「建议收藏」手把手教你搭建redis集群
- OSI参考模型与排错经验谈
- 王建林的一个亿,靠打工能实现么?
- python制作电子签名
- 数据分析图表配色大全,可视化设计走高级路线的一定要看
- 生活四大勤,让老人延年益寿
- 流浪是对另一种生活的执着
- 海洋cms漏洞——search.php
- PCI-DSS安全认证