jwt 的使用

记录一下jwt的使用类

using BeetleX.FastHttpApi;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Text;

namespace BeetleX.Blog
{
    public class JWTHelper
    {
        public const string TOKEN_KEY = "Token";

        private string mIssuer = null;//发行

        private string mAudience = null;//受众

        private SecurityKey mSecurityKey;//安全密钥

        private SigningCredentials mSigningCredentials;//签名证书

        private TokenValidationParameters mTokenValidation = new TokenValidationParameters();//验证

        private JwtSecurityTokenHandler mJwtSecurityTokenHandler = new JwtSecurityTokenHandler();//安全令牌处理程序

        public JWTHelper(string issuer, string audience, byte[] key)
        {
            mIssuer = issuer;
            mAudience = audience;
            mSecurityKey = new SymmetricSecurityKey(key);
            if (string.IsNullOrEmpty(mIssuer))
            {
                mTokenValidation.ValidateIssuer = false;
            }
            else
            {
                mTokenValidation.ValidIssuer = mIssuer;
            }
            if (string.IsNullOrEmpty(mAudience))
            {
                mTokenValidation.ValidateAudience = false;
            }
            else
            {
                mTokenValidation.ValidAudience = mAudience;
            }
            mTokenValidation.IssuerSigningKey = mSecurityKey;
            mSigningCredentials = new SigningCredentials(mSecurityKey, SecurityAlgorithms.HmacSha256);
            Expires = 60 * 24;
        }

        public int Expires { get; set; }



        public void ClearToken(HttpResponse response)
        {
            response.SetCookie(TOKEN_KEY, "", "/", DateTime.Now);
        }

        public void CreateToken(HttpResponse response, string name, string role, int timeout = 20)
        {
            string token = CreateToken(name, role, timeout);
            response.SetCookie(TOKEN_KEY, token, "/", DateTime.Now.AddDays(100));
        }

        public string CreateToken(string name, string role, int timeout = 20)
        {
            ClaimsIdentity claimsIdentity = new ClaimsIdentity();
            claimsIdentity.AddClaim(new Claim("Name", name));
            claimsIdentity.AddClaim(new Claim("Role", role));
            var item = mJwtSecurityTokenHandler.CreateEncodedJwt(mIssuer, mAudience, claimsIdentity, DateTime.Now.AddMinutes(-5),
                DateTime.Now.AddMinutes(timeout), DateTime.Now,
               mSigningCredentials);
            return item;
        }

        public ClaimsPrincipal ValidateToken(string token)
        {
            return mJwtSecurityTokenHandler.ValidateToken(token, mTokenValidation, out var securityToken);
        }

        public UserInfo GetUserInfo(HttpRequest request)
        {
            string token = request.Cookies[TOKEN_KEY];
            if (string.IsNullOrEmpty(token))
                return null;
            try
            {
                return GetUserInfo(token);
            }
            catch (Exception e_)
            {
                HttpApiServer server = request.Server;
                if (server.EnableLog(EventArgs.LogType.Info))
                {
                    server.Log(EventArgs.LogType.Info, $"{request.RemoteIPAddress} get token error {e_.Message}");
                }
                return null;
            }

        }

        public UserInfo GetUserInfo(string token)
        {
            UserInfo userInfo = new UserInfo();
            if (!string.IsNullOrEmpty(token))
            {
                var info = ValidateToken(token);
                ClaimsIdentity identity = info?.Identity as ClaimsIdentity;
                userInfo.Name = identity?.Claims?.FirstOrDefault(c => c.Type == "Name")?.Value;
                userInfo.Role = identity?.Claims?.FirstOrDefault(c => c.Type == "Role")?.Value;
            }
            return userInfo;
        }

        public class UserInfo
        {
            public string Name;

            public string Role;
        }

        public static JWTHelper Default
        {
            get;
            set;
        }

        public static void Init()
        {
            Default = new JWTHelper("BeetleX", "BeetleX", Convert.FromBase64String(DBModules.DBHelper.Default.Setting.JwtKey.Value));
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜皮弟子头很铁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值