66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
| using Microsoft.Extensions.Options;
 | ||
| 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;
 | ||
| 
 | ||
| namespace ZhaoXi._001.NET5Demo.Practice.WebApi.Utility.Jwt
 | ||
| {
 | ||
|     /// <summary>
 | ||
|     /// 对称可逆加密
 | ||
|     /// </summary>
 | ||
|     public class CustomHSJWTService : ICustomJWTService
 | ||
|     {
 | ||
|         #region Option注入
 | ||
|         private readonly JWTTokenOptions _JWTTokenOptions;
 | ||
|         public CustomHSJWTService(IOptionsMonitor<JWTTokenOptions> jwtTokenOptions)
 | ||
|         {
 | ||
|             this._JWTTokenOptions = jwtTokenOptions.CurrentValue;
 | ||
|         }
 | ||
|         #endregion
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 用户登录成功以后,用来生成Token的方法
 | ||
|         /// </summary>
 | ||
|         /// <param name="UserName"></param>
 | ||
|         /// <param name="password"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public string GetToken(string UserName, string password)
 | ||
|         {
 | ||
|             #region 有效载荷,大家可以自己写,爱写多少写多少;尽量避免敏感信息
 | ||
|             var claims = new[]
 | ||
|             {
 | ||
|                new Claim(ClaimTypes.Name, UserName),
 | ||
|                new Claim("NickName",UserName),
 | ||
|                new Claim("Role","Administrator"),//传递其他信息   
 | ||
|                new Claim("ABCC","ABCC"),
 | ||
|                new Claim("ABCCDDDDD","ABCCDDDDD"),
 | ||
|                new Claim("Student","甜酱油")
 | ||
|             };
 | ||
| 
 | ||
|             //需要加密:需要加密key:
 | ||
|             //Nuget引入:Microsoft.IdentityModel.Tokens
 | ||
|             SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_JWTTokenOptions.SecurityKey));
 | ||
| 
 | ||
|             SigningCredentials creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
 | ||
| 
 | ||
|             //Nuget引入:System.IdentityModel.Tokens.Jwt
 | ||
|             JwtSecurityToken token = new JwtSecurityToken(
 | ||
|              issuer: _JWTTokenOptions.Issuer,
 | ||
|              audience: _JWTTokenOptions.Audience,
 | ||
|              claims: claims,
 | ||
|              expires: DateTime.Now.AddMinutes(5),//5分钟有效期
 | ||
|              signingCredentials: creds);
 | ||
| 
 | ||
|             string returnToken = new JwtSecurityTokenHandler().WriteToken(token);
 | ||
|             return returnToken;
 | ||
|             #endregion
 | ||
| 
 | ||
|         }
 | ||
|     }
 | ||
| }
 |