c#中token的使用方法實例
更新時間:2022年02月14日 09:51:01 作者:DarkAfraid
本文主要介紹了c#中token的使用方法實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
token的存在意義
這是我初略了解的token的存在意義
- 用戶使用用戶名密碼來請求服務器
- 服務器進行驗證用戶的信息
- 服務器通過驗證發(fā)送給用戶一個token
- 客戶端存儲token,并在每次請求時附送上這個token值
- 服務端驗證token值,并返回數(shù)據(jù)
使用方法
先安裝一個JWT,注意NetFramework的版本
創(chuàng)建一個工具類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值提取出,無須傳值
到此這篇關于c#中token的使用方法實例的文章就介紹到這了,更多相關c# token內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關文章
Unity Shader實現(xiàn)動態(tài)霧效果
這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)動態(tài)霧效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04C# .Net實現(xiàn)灰度圖和HeatMap熱力圖winform(進階)
本文主要介紹了C# .NET實現(xiàn)簡易灰度圖和酷炫HeatMap熱力圖winform,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12