註意:首先安裝JWT程式包 using System;using System.Collections.Generic;using System.Linq;using System.Web; using JWT;using JWT.Algorithms; //加密演算法using JWT.Builde ...
註意:首先安裝JWT程式包
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using JWT;
using JWT.Algorithms; //加密演算法
using JWT.Builder;
using JWT.Exceptions;
using JWT.Serializers;
namespace WebApplication1.Models
{
public class JWTHelper
{
private string Key { get; set; } = "bfdhargrtjuykreawtuyjtretryjgafasdgrth";// 這個密鑰
private IJwtAlgorithm algorithm { get; set; } // 這是 HMACSHA256加密演算法
private IJsonSerializer serializer { get; set; }// 這是JSON序列化工具
private IBase64UrlEncoder urlEncoder { get; set; } // 這是BASE64編碼工具
private IDateTimeProvider provider { get; set; }// 時間提供器 用來提供 格式一致的時間
private IJwtValidator validator { get; set; }
public JWTHelper()
{
Key = "klklergsflergldsarertlherdsigerklgld";// 這個密鑰
algorithm = new HMACSHA256Algorithm(); // 這是 HMACSHA256加密演算法
serializer = new JsonNetSerializer();// 這是JSON序列化工具
urlEncoder = new JwtBase64UrlEncoder(); // 這是BASE64編碼工具
provider = new UtcDateTimeProvider(); // 時間提供器
validator = new JwtValidator(serializer, provider); // 令牌校驗器,用來驗證有效期和簽名
}
//加密
public string GetToken(Dictionary<string, object> payload,int expSeconds)
{
var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // or use JwtValidator.UnixEpoch
var now = provider.GetNow();
payload["exp"] = Math.Round((now - unixEpoch).TotalSeconds) + expSeconds;// exp 有效期
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);// JWT加密工具
var token = encoder.Encode(payload, Key); // 加密生成TOKEN
return token;
}
// 解密
public string GetPayload(string token)
{
try
{
IJwtDecoder decoder = new JwtDecoder(serializer,validator, urlEncoder, algorithm); // 創建解密工具
var json = decoder.Decode(token, Key, verify: true);//token 中的載體的 JSON 格式字元串
return json; // payload
}
catch (TokenExpiredException)
{
Console.WriteLine("Token has expired");
return null;
}
catch (SignatureVerificationException)
{
Console.WriteLine("Token has invalid signature");
return null;
}
}
}
}
作者還在學習中,發現錯誤的請在評論區留言。 如果有客友覺得文章還行的話,請點波推薦哦