.net jwt帮助类

这篇博客介绍了如何在.NET项目中使用JWT库,通过添加NuGet包JWT来实现JSON Web Token的相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加nuget-jwt引用:https://www.nuget.org/packages/JWT/

public class TokenInfo
    {
        public TokenInfo()
        {
            iss = "COM.Web";
            iat = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
            exp = iat + 300;
            aud = "";
            sub = "COM.Web";
            jti = "COM.Web." + DateTime.Now.ToString("yyyyMMddhhmmssfff");
        }

        /// <summary>
        /// jwt签发者
        /// </summary>
        public string iss { get; set; }
        /// <summary>
        /// jwt的签发时间
        /// </summary>
        public double iat { get; set; }
        /// <summary>
        /// jwt的过期时间,这个过期时间必须要大于签发时间
        /// </summary>
        public double exp { get; set; }
        /// <summary>
        /// 接收jwt的一方
        /// </summary>
        public string aud { get; set; }
        /// <summary>
        /// 定义在什么时间之前,该jwt都是不可用的
        /// </summary>
        public double nbf { get; set; }
        /// <summary>
        /// jwt所面向的用户
        /// </summary>
        public string sub { get; set; }
        /// <summary>
        /// jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
        /// </summary>
        public string jti { get; set; }
    }

public class TokenHelper
    {
        /// <summary>
        /// jwt私钥
        /// </summary>
        private const string SecretKey = "私钥";

        /// <summary>
        /// 创建新token
        /// </summary>
        /// <param name="payload"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">payload 为 null。</exception>
        public static string GenerateToken(Dictionary<string, object> payload)
        {
            if (payload == null)
                throw new ArgumentNullException(nameof(payload));

            var tokenInfo = new TokenInfo();

            payload.Add("iss", tokenInfo.iss);
            payload.Add("iat", tokenInfo.iat);
            payload.Add("exp", tokenInfo.exp);
            payload.Add("aud", tokenInfo.aud);
            payload.Add("sub", tokenInfo.sub);
            payload.Add("jti", tokenInfo.jti);

            IJwtAlgorithm     algorithm  = new HMACSHA256Algorithm();
            IJsonSerializer   serializer = new JsonNetSerializer();
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
            IJwtEncoder       encoder    = new JwtEncoder(algorithm, serializer, urlEncoder);

            var token = encoder.Encode(payload, SecretKey);
            return token;
        }

        /// <summary>
        /// 解码token
        /// </summary>
        /// <param name="strToken">token字符串</param>
        /// <returns>json内容</returns>
        /// <exception cref="ArgumentNullException">strToken 为 null、空和由空白字符组成。</exception>
        public static string GetDecodingToken(string strToken)
        {
            if (string.IsNullOrWhiteSpace(strToken))
                throw new ArgumentNullException(nameof(strToken));

            IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
            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, algorithm);

            var json = decoder.Decode(strToken, SecretKey, true);
            return json;
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值