66 lines
2.1 KiB
C#
66 lines
2.1 KiB
C#
|
|
using JWT;
|
|||
|
|
using JWT.Algorithms;
|
|||
|
|
using JWT.Serializers;
|
|||
|
|
using Newtonsoft.Json;
|
|||
|
|
using Newtonsoft.Json.Linq;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using MyCode.Project.Infrastructure.Exceptions;
|
|||
|
|
|
|||
|
|
namespace MyCode.Project.Infrastructure.Common
|
|||
|
|
{
|
|||
|
|
public class TokenHelper
|
|||
|
|
{
|
|||
|
|
#region CreateToken(创建token)
|
|||
|
|
public static string CreateToken(string key ,string objName,object t,int expireMinute=300)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
var payload = new Dictionary<string, object>
|
|||
|
|
{
|
|||
|
|
{ "exp", DateTimeOffset.UtcNow.AddMinutes(expireMinute).ToUnixTimeSeconds() },
|
|||
|
|
{ objName,t}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//采用HS256加密算法
|
|||
|
|
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
|
|||
|
|
IJsonSerializer serializer = new JsonNetSerializer();
|
|||
|
|
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
|
|||
|
|
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
|
|||
|
|
|
|||
|
|
return encoder.Encode(payload, key);
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region Get(根据token得到登陆信息)
|
|||
|
|
public static object Get(string token,string tokenKey,string jsonKey)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
IJsonSerializer serializer = new JsonNetSerializer();
|
|||
|
|
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
|
|||
|
|
IDateTimeProvider provider = new UtcDateTimeProvider();
|
|||
|
|
IJwtValidator validator = new JwtValidator(serializer, provider);
|
|||
|
|
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
|
|||
|
|
|
|||
|
|
var dic = decoder.DecodeToObject<Dictionary<string, object>>(token);
|
|||
|
|
|
|||
|
|
var obj = dic[jsonKey];
|
|||
|
|
|
|||
|
|
return obj;
|
|||
|
|
}
|
|||
|
|
catch (TokenExpiredException ex)
|
|||
|
|
{
|
|||
|
|
throw new BaseException("请重新登陆,token已失效");
|
|||
|
|
}
|
|||
|
|
catch (SignatureVerificationException ex)
|
|||
|
|
{
|
|||
|
|
throw new BaseException("请重新登陆,签名错误");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
}
|
|||
|
|
}
|