網站首頁 編程語言 正文
token的存在意義
這是我初略了解的token的存在意義
- 用戶使用用戶名密碼來請求服務器
- 服務器進行驗證用戶的信息
- 服務器通過驗證發送給用戶一個token
- 客戶端存儲token,并在每次請求時附送上這個token值
- 服務端驗證token值,并返回數據
使用方法
先安裝一個JWT,注意NetFramework的版本
創建一個工具類TokenInfo.cs
using JWT; using JWT.Algorithms; using JWT.Serializers; using System; using System.Collections.Generic; using System.Web; using System.Web.Script.Serialization; namespace ProjectLYG.Common { ? ? public class TokenInfo ? ? { ? ? ? ? public TokenInfo() ? ? ? ? { ? ? ? ? ? ? UserName = "j"; ? ? ? ? ? ? Pwd = "123456"; ? ? ? ? } ? ? ? ? public string UserName { get; set; } ? ? ? ? public string Pwd { get; set; } ? ? } ? ? public class TokenHelper ? ? { ? ? ? ? public static string SecretKey = "bqsid123k12s0h1d3uhf493fh02hdd102h9s3h38ff";//這個服務端加密秘鑰 屬于私鑰 ? ? ? ? private static JavaScriptSerializer myJson = new JavaScriptSerializer(); ? ? ? ? /// <summary> ? ? ? ? /// 生成Token ? ? ? ? /// </summary> ? ? ? ? /// <param name="M"></param> ? ? ? ? /// <returns></returns> ? ? ? ? public static string GenToken(TokenInfo M) ? ? ? ? { ? ? ? ? ? ? var payload = new Dictionary<string, dynamic> ? ? ? ? ? ? { ? ? ? ? ? ? ? ? {"UserName", M.UserName},//用于存放當前登錄人賬戶信息 ? ? ? ? ? ? ? ? {"UserPwd", M.Pwd}//用于存放當前登錄人登錄密碼信息 ? ? ? ? ? ? }; ? ? ? ? ? ? IJwtAlgorithm algorithm = new HMACSHA256Algorithm(); ? ? ? ? ? ? IJsonSerializer serializer = new JsonNetSerializer(); ? ? ? ? ? ? IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder(); ? ? ? ? ? ? IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder); ? ? ? ? ? ? return encoder.Encode(payload, SecretKey); ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 驗證Token ? ? ? ? /// </summary> ? ? ? ? /// <returns></returns> ? ? ? ? public static string DecodeToken() ? ? ? ? { ? ? ? ? ? ? //獲取request中的token ? ? ? ? ? ? string token = HttpContext.Current.Request.Headers["Authorization"]; ? ? ? ? ? ? //去掉前面的Bearer ? ? ? ? ? ? if (token != null && token.StartsWith("Bearer")) ? ? ? ? ? ? ? ? token = token.Substring("Bearer ".Length).Trim(); ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? var json = GetTokenJson(token); ? ? ? ? ? ? ? ? TokenInfo info = myJson.Deserialize<TokenInfo>(json); ? ? ? ? ? ? ? ? return "Token is true"; ? ? ? ? ? ? } ? ? ? ? ? ? catch (TokenExpiredException) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return "Token has expired"; ? ? ? ? ? ? } ? ? ? ? ? ? catch (SignatureVerificationException) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return "Token has invalid signature"; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? public static string GetTokenJson(string token) ? ? ? ? { ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? IJsonSerializer serializer = new JsonNetSerializer(); ? ? ? ? ? ? ? ? IDateTimeProvider provider = new UtcDateTimeProvider(); ? ? ? ? ? ? ? ? IJwtValidator validator = new JwtValidator(serializer, provider); ? ? ? ? ? ? ? ? IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder(); ? ? ? ? ? ? ? ? IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder); ? ? ? ? ? ? ? ? var json = decoder.Decode(token, SecretKey, verify: true); ? ? ? ? ? ? ? ? return json; ? ? ? ? ? ? } ? ? ? ? ? ? catch (Exception) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw; ? ? ? ? ? ? } ? ? ? ? } ? ? } }
使用方法
??? ??? ??? ??? ?//生成Token ? ? ? ? ? ? ? ? TokenInfo tokenInfo = new TokenInfo(); ? ? ? ? ? ? ? ? tokenInfo.Pwd = password; ? ? ? ? ? ? ? ? tokenInfo.UserName = tel; ? ? ? ? ? ? ? ? string token = TokenHelper.GenToken(tokenInfo); ? ? ? ? ? ? ? ? ........ ? ? ? ? ? ? ? ? ?//token驗證 ? ? ? ? ? ? ? ? string tokenInfo = TokenHelper.DecodeToken(); ? ? ? ? ? ? ? ? ........
工具類已將返回的Request的token值提取出,無須傳值
原文鏈接:https://blog.csdn.net/DarkAfraid/article/details/103179070
相關推薦
- 2022-06-16 Python數據結構之遞歸方法詳解_python
- 2022-06-16 Go基礎教程系列之數據類型詳細說明_Golang
- 2022-08-16 C#在MEF框架中實現延遲加載部件_C#教程
- 2022-12-04 Android性能優化死鎖監控知識點詳解_Android
- 2022-04-26 jquery實現表格行拖動排序_jquery
- 2022-04-09 python的函數參數你了解嗎_python
- 2022-04-16 Python?import自己的模塊報錯問題及解決_python
- 2022-10-01 Docker部署單頁應用的詳細操作_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支