ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Token +JWT生成

2022-05-04 08:00:13  阅读:158  来源: 互联网

标签:-- JWT token 生成 Token new 服务端 客户端


Token

参考网址 :c# asp.net 中使用token验证 - 阿Q啊 - 博客园 (cnblogs.com)

背景:1、Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否情况下应运而生

    2、Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,第一次成功登录后,服务器生成一个Token便将此Token返回给客户端

        以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

      3、前后端分离项目中(Vue+.Net Core API)使用token  例如:判断是否用户登录--该博客就是以其为案例编写

目的: 1、Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

流程:

  **客户端使用用户名跟密码请求登录
  **服务端收到请求,去验证用户名与密码
  **验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  **客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
  **客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  **服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

代码实现:--主要为后端编写生成Token

  --创建用来放(接收)用户信息和Token(字符串)信息的类

 

 --创建一个字典类(类似于数据库)

将登录成功的用户信息和加密后的token信息(字符串)存入字典中(类似存入数据库中,用于后面判断该字典内是否有登录数据(是否登录过)

 

--生成Token  并返回

 

 

JWT

参考网址:什么是 JWT -- JSON WEB TOKEN - 简书 (jianshu.com)

由三部分组成,他们之间用(.)连接,这三部分分别是

    • Header
    • Paylaod
    • Signature
      形如下面的字符串:  xxxxx.yyyyy.zzzzz

 

代码实现

1、创建一个类,其中放置当前用户名+当前时间--用于生成jwt加密的token对象

 

2、创建类,封装JWT加密、解密方法

--加密后就是一个长字符串

--解密后就是上面LoginJwtObj类中定义的信息

--//引用JWT包 + 引用Newtonsoft.json包

//引用JWT包  + 引用Newtonsoft.json包
private static string secret = "eyJ0eXAiOiJKV1QiLCJhbGciUIioNKrtMNer";//这个服务端加密秘钥 属于私钥 /// <summary> /// 加密方法 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string Encode(object obj) { IJwtAlgorithm algorithm = new HMACSHA256Algorithm(); IJsonSerializer serializer = new JsonNetSerializer(); IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder(); IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder); var token = encoder.Encode(obj, secret); return token; } /// <summary> /// 解密方法 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="token"></param> /// <returns></returns> public static T Decode<T>(string token) { string json; try { IJsonSerializer serializer = new JsonNetSerializer(); // IDateTimeProvider provider = new UtcDateTimeProvider(); //IAlgorithmFactory algorithmFactory = new AlgorithmFactory(); //IJwtValidator validator = new JwtValidator(serializer, provider); IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder(); IJwtDecoder decoder = new JwtDecoder(serializer, urlEncoder); json = decoder.Decode(token, secret, verify: false);//token为之前生成的字符串 T model = JsonConvert.DeserializeObject<T>(json); //对时间和用户账户密码进行认证 return model; } catch (Exception) { return default(T); } }

 

3、生成token处,将token用JWT方式加密   --上一知识点中的第三个截图

token解密

 

标签:--,JWT,token,生成,Token,new,服务端,客户端
来源: https://www.cnblogs.com/ZhuMeng-Chao/p/16219267.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有