Yi.Framework.Net6/Yi.Framework.Core/JwtInvoker.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.JsonWebTokens;
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;
using System.Threading.Tasks;
using Yi.Framework.Common.Const;
using Yi.Framework.Common.IOCOptions;
using Yi.Framework.Model.Models;
using JwtRegisteredClaimNames = Microsoft.IdentityModel.JsonWebTokens.JwtRegisteredClaimNames;

namespace Yi.Framework.Core
{
    public class JwtInvoker
    {
        private readonly JWTTokenOptions _JWTTokenOptions;
        public JwtInvoker(IOptionsMonitor<JWTTokenOptions> jwtTokenOptions)
        {
            this._JWTTokenOptions = jwtTokenOptions.CurrentValue;
        }
        public string GetRefreshToken(UserEntity user)
        {
            return this.GetToken(_JWTTokenOptions.ReExpiration, user, null, true);
        }

        public TimeSpan GetTokenExpiration()
        {
            return new TimeSpan(0, _JWTTokenOptions.Expiration, 0); 
        }

        public string GetAccessToken(UserEntity user, HashSet<MenuEntity> menus)
        {
            return this.GetToken(_JWTTokenOptions.Expiration, user, menus);
        }

        private string GetToken(int minutes, UserEntity user, HashSet<MenuEntity> menus, bool isRefresh = false)
        {
            List<Claim> claims = new List<Claim>();
            claims.Add(new Claim(JwtRegisteredClaimNames.Nbf, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"));
            claims.Add(new Claim(JwtRegisteredClaimNames.Exp, $"{new DateTimeOffset(DateTime.Now.AddMinutes(minutes)).ToUnixTimeSeconds()}"));
            claims.Add(new Claim(JwtRegisteredClaimNames.Sid, user.Id.ToString()));
            claims.Add(new Claim("userName", user.UserName));
            claims.Add(new Claim("deptId", user.DeptId.ToString()));
            //-----------------------------以下从user的权限表中添加权限-----------------------例如:

            foreach (var m in menus)
            {
                if (!string.IsNullOrEmpty(m.PermissionCode))
                {
                    claims.Add(new Claim(SystemConst.PermissionClaim, m.PermissionCode.ToString()));
                }
            }
            if (SystemConst.Admin.Equals(user.UserName))
            {
                claims.Add(new Claim(SystemConst.PermissionClaim, SystemConst.AdminPermissionCode));
            }
后面还有 16 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。