2021-10-14 20:29:07 +08:00
|
|
|
|
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.Model.Models;
|
|
|
|
|
|
using JwtRegisteredClaimNames = Microsoft.IdentityModel.JsonWebTokens.JwtRegisteredClaimNames;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Yi.Framework.Core
|
|
|
|
|
|
{
|
2021-10-24 15:13:41 +08:00
|
|
|
|
|
2022-04-02 17:44:50 +08:00
|
|
|
|
public class JwtUser
|
2021-10-24 15:13:41 +08:00
|
|
|
|
{
|
2022-04-03 23:21:53 +08:00
|
|
|
|
public UserEntity user { get; set; }
|
2021-10-24 15:13:41 +08:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-14 20:29:07 +08:00
|
|
|
|
public class MakeJwt
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2021-10-24 15:13:41 +08:00
|
|
|
|
/// user需关联所有roles,还有一个menuIds
|
2021-10-14 20:29:07 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="_user"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2022-04-02 17:44:50 +08:00
|
|
|
|
public static string app(JwtUser _user)
|
2021-10-14 20:29:07 +08:00
|
|
|
|
{
|
|
|
|
|
|
//通过查询权限,把所有权限加入进令牌中
|
|
|
|
|
|
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(30)).ToUnixTimeSeconds()}"));
|
2022-04-03 23:21:53 +08:00
|
|
|
|
claims.Add(new Claim(ClaimTypes.Name, _user.user.Name));
|
2022-04-02 17:44:50 +08:00
|
|
|
|
claims.Add(new Claim(ClaimTypes.Sid, _user.user.Id.ToString()));
|
2022-01-11 16:40:15 +08:00
|
|
|
|
//现在不存放在jwt中,而存放在redis中
|
|
|
|
|
|
//foreach (var k in _user?.menuIds)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// claims.Add(new Claim("menuIds",k.id.ToString()));
|
|
|
|
|
|
//}
|
2022-04-02 17:44:50 +08:00
|
|
|
|
//foreach (var k in _user.user.roles)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// claims.Add(new Claim(ClaimTypes.Role, k.role_name));
|
|
|
|
|
|
//}
|
2021-10-14 20:29:07 +08:00
|
|
|
|
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(JwtConst.SecurityKey));
|
|
|
|
|
|
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
|
|
|
|
|
|
|
|
|
|
|
|
var token = new JwtSecurityToken(
|
|
|
|
|
|
issuer: JwtConst.Domain,
|
|
|
|
|
|
audience: JwtConst.Domain,
|
|
|
|
|
|
claims: claims,
|
|
|
|
|
|
expires: DateTime.Now.AddMinutes(30),
|
|
|
|
|
|
signingCredentials: creds);
|
|
|
|
|
|
var tokenData = new JwtSecurityTokenHandler().WriteToken(token);
|
|
|
|
|
|
|
|
|
|
|
|
return tokenData;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|