修改jwt

This commit is contained in:
橙子
2021-10-24 15:13:41 +08:00
parent 1342b50b68
commit 3ce0355a79
2 changed files with 26 additions and 11 deletions

View File

@@ -13,28 +13,38 @@ using JwtRegisteredClaimNames = Microsoft.IdentityModel.JsonWebTokens.JwtRegiste
namespace Yi.Framework.Core namespace Yi.Framework.Core
{ {
public class jwtUser
{
public user user { get; set; }
public List<menu> menuIds { get; set; }
}
public class MakeJwt public class MakeJwt
{ {
/// <summary> /// <summary>
/// user需关联所有roles /// user需关联所有roles,还有一个menuIds
/// </summary> /// </summary>
/// <param name="_user"></param> /// <param name="_user"></param>
/// <returns></returns> /// <returns></returns>
public static string app(user _user) public static string app(jwtUser _user)
{ {
//通过查询权限,把所有权限加入进令牌中 //通过查询权限,把所有权限加入进令牌中
List<Claim> claims = new List<Claim>(); List<Claim> claims = new List<Claim>();
claims.Add(new Claim(JwtRegisteredClaimNames.Nbf, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}")); claims.Add(new Claim(JwtRegisteredClaimNames.Nbf, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"));
claims.Add(new Claim(JwtRegisteredClaimNames.Exp, $"{new DateTimeOffset(DateTime.Now.AddMinutes(30)).ToUnixTimeSeconds()}")); claims.Add(new Claim(JwtRegisteredClaimNames.Exp, $"{new DateTimeOffset(DateTime.Now.AddMinutes(30)).ToUnixTimeSeconds()}"));
claims.Add(new Claim(ClaimTypes.Name, _user.username)); claims.Add(new Claim(ClaimTypes.Name, _user.user.username));
claims.Add(new Claim(ClaimTypes.Sid, _user.id.ToString())); claims.Add(new Claim(ClaimTypes.Sid, _user.user.id.ToString()));
foreach (var k in _user.menuIds)
foreach (var k in _user.roles) {
claims.Add(new Claim("menuIds",k.id.ToString()));
}
foreach (var k in _user.user.roles)
{ {
claims.Add(new Claim(ClaimTypes.Role, k.role_name)); claims.Add(new Claim(ClaimTypes.Role, k.role_name));
} }
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(JwtConst.SecurityKey)); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(JwtConst.SecurityKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

View File

@@ -29,14 +29,19 @@ namespace Yi.Framework.WebCore
/// </summary> /// </summary>
/// <param name="httpContext"></param> /// <param name="httpContext"></param>
/// <returns></returns> /// <returns></returns>
public static user GetCurrentUserInfo(this HttpContext httpContext) public static user GetCurrentUserInfo(this HttpContext httpContext, out List<int> menuIds)
{ {
IEnumerable<Claim> claimlist = httpContext.AuthenticateAsync().Result.Principal.Claims; IEnumerable<Claim> claimlist = httpContext.AuthenticateAsync().Result.Principal.Claims;
Int32.TryParse(claimlist.FirstOrDefault(u => u.Type == ClaimTypes.Sid).Value,out int resId); Int32.TryParse(claimlist.FirstOrDefault(u => u.Type == ClaimTypes.Sid).Value, out int resId);
menuIds = claimlist.Where(u => u.Type == "menuIds").ToList().Select(u => Convert.ToInt32(u.Value)).ToList();
return new user() return new user()
{ {
id =resId, id = resId,
username = claimlist.FirstOrDefault(u => u.Type == ClaimTypes.Name).Value ?? "匿名" username = claimlist.FirstOrDefault(u => u.Type == ClaimTypes.Name).Value ?? "匿名"
}; };
} }