| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | 
							- using Microsoft.AspNetCore.Authentication;
 
- using Microsoft.AspNetCore.Authentication.Cookies;
 
- using Microsoft.AspNetCore.Http;
 
- using NetTaste;
 
- using OASystem.API.OAMethodLib.JuHeAPI;
 
- using OASystem.Domain.Dtos.Business;
 
- using SqlSugar.Extensions;
 
- using System.IdentityModel.Tokens.Jwt;
 
- using System.Security.Claims;
 
- using static NPOI.HSSF.Util.HSSFColor;
 
- namespace OASystem.API.OAMethodLib
 
- {
 
-     public class JWTHelper
 
-     {
 
-         public class JwtHelper
 
-         {
 
-             private readonly static IHttpContextAccessor _httpContextAccessor = AutofacIocManager.Instance.GetService<IHttpContextAccessor>();
 
-             /// <summary>
 
-             /// 颁发JWT字符串
 
-             /// </summary>
 
-             /// <param name="tokenModel"></param>
 
-             /// <returns></returns>
 
-             public static async Task<string> IssueJwtAsync(TokenModelJwt tokenModel)
 
-             {
 
-                 //  appsettign.json 操作类
 
-                 string iss = "OASystem.com";
 
-                 string aud = "OASystem.com";
 
-                 string secret = AppSettingsHelper.Get("JwtSecurityKey");
 
-                 var claims = new List<Claim>
 
-               {
 
-                  /*
 
-                  * 特别重要:
 
-                    1、这里将用户的部分信息,比如 uid 存到了Claim 中,如果你想知道如何在其他地方将这个 uid从 Token 中取出来,请看下边的SerializeJwt() 方法,或者在整个解决方案,搜索这个方法,看哪里使用了!
 
-                    2、你也可以研究下 HttpContext.User.Claims ,具体的你可以看看 Policys/PermissionHandler.cs 类中是如何使用的。
 
-                  */                
 
-                 new Claim(JwtRegisteredClaimNames.Jti, tokenModel.UserId.ToString()),
 
-                 //new Claim(JwtRegisteredClaimNames.GivenName, tokenModel.UserName),
 
-                 new Claim("UserName", tokenModel.UserName),
 
-                 //new Claim("UserId", tokenModel.UserId.ToString()),
 
-                 new Claim(JwtRegisteredClaimNames.Iat, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"),
 
-                 new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") ,
 
-                 //这个就是过期时间,目前是过期7200秒,可自定义,注意JWT有自己的缓冲过期时间
 
-                 new Claim(JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(DateTime.Now.AddSeconds(7200)).ToUnixTimeSeconds()}"),
 
-                 new Claim(JwtRegisteredClaimNames.Iss,iss),
 
-                 new Claim(JwtRegisteredClaimNames.Aud,aud),
 
-                 
 
-                 //new Claim(ClaimTypes.Role,tokenModel.Role),//为了解决一个用户多个角色(比如:Admin,System),用下边的方法
 
-                };
 
-                 // 可以将一个用户的多个角色全部赋予;
 
-                 claims.AddRange(tokenModel.Role.Split(',').Select(s => new Claim(ClaimTypes.Role, s)));
 
-                 //秘钥 (SymmetricSecurityKey 对安全性的要求,密钥的长度太短会报出异常)
 
-                 var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
 
-                 var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
 
-                 var jwt = new JwtSecurityToken(
 
-                     issuer: iss,
 
-                     claims: claims,
 
-                     signingCredentials: creds
 
-                     //,expires:DateTime.Now.AddMinutes(1)
 
-                     );
 
-                // var indentity = new ClaimsIdentity(claims, "FMGJ-OASystem");
 
-                // var principal = new ClaimsPrincipal(indentity);
 
-                //await _httpContextAccessor.HttpContext?.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
 
-                 
 
-                 var jwtHandler = new JwtSecurityTokenHandler();
 
-                 var encodedJwt = jwtHandler.WriteToken(jwt);
 
-                 return encodedJwt;
 
-             }
 
-             /// <summary>
 
-             /// 解析
 
-             /// </summary>
 
-             /// <param name="jwtStr"></param>
 
-             /// <returns></returns>
 
-             public static TokenModelJwt SerializeJwt(string jwtStr)
 
-             {
 
-                 var jwtHandler = new JwtSecurityTokenHandler();
 
-                 JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr);
 
-                 object role,userName;
 
-                 try
 
-                 {
 
-                     jwtToken.Payload.TryGetValue(ClaimTypes.Role, out role);
 
-                     jwtToken.Payload.TryGetValue("UserName", out userName);
 
-                 }
 
-                 catch (Exception e)
 
-                 {
 
-                     Console.WriteLine(e);
 
-                     throw;
 
-                 }
 
-                 var tm = new TokenModelJwt
 
-                 {
 
-                     UserId = (jwtToken.Id).ObjToInt(),
 
-                     UserName = userName != null ? userName.ObjToString() : "",
 
-                     Role = role != null ? role.ObjToString() : "",
 
-                 };
 
-                 return tm;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 令牌
 
-         /// </summary>
 
-         public class TokenModelJwt
 
-         {
 
-             /// <summary>
 
-             /// Id
 
-             /// </summary>
 
-             public int UserId { get; set; }
 
-             public string UserName { get; set; }
 
-             public string Role { get; set; } = "Admin";
 
-             /// <summary>
 
-             /// 过期时间,默认过期7200秒
 
-             /// 注意JWT有自己的缓冲过期时间
 
-             /// </summary>
 
-             public int ExpirationTime { get; set; } = 7200;
 
-         }
 
-     }
 
- }
 
 
  |