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 算力,解读结果公开显示在下面。
还没有人解读过这个文件。
