61 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
using Microsoft.Extensions.Options;
 | 
						|
using Microsoft.IdentityModel.Tokens;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.IdentityModel.Tokens.Jwt;
 | 
						|
using System.IO;
 | 
						|
using System.Linq;
 | 
						|
using System.Security.Claims;
 | 
						|
using System.Security.Cryptography;
 | 
						|
using System.Threading.Tasks;
 | 
						|
 | 
						|
namespace ZhaoXi._001.NET5Demo.Practice.WebApi.Utility.Jwt
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// 非对称可逆加密
 | 
						|
    /// </summary>
 | 
						|
    public class CustomRSSJWTervice : ICustomJWTService
 | 
						|
 | 
						|
    {
 | 
						|
        #region Option注入
 | 
						|
        private readonly JWTTokenOptions _JWTTokenOptions;
 | 
						|
        public CustomRSSJWTervice(IOptionsMonitor<JWTTokenOptions> jwtTokenOptions)
 | 
						|
        {
 | 
						|
            this._JWTTokenOptions = jwtTokenOptions.CurrentValue;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        public string GetToken(string userName, string password)
 | 
						|
        {
 | 
						|
            #region 使用加密解密Key  非对称 
 | 
						|
            string keyDir = Directory.GetCurrentDirectory();
 | 
						|
            if (RSAHelper.TryGetKeyParameters(keyDir, true, out RSAParameters keyParams) == false)
 | 
						|
            {
 | 
						|
                keyParams = RSAHelper.GenerateAndSaveKey(keyDir);
 | 
						|
            }
 | 
						|
            #endregion
 | 
						|
 | 
						|
            //string jtiCustom = Guid.NewGuid().ToString();//用来标识 Token
 | 
						|
            Claim[] claims = new[]
 | 
						|
            {
 | 
						|
                   new Claim(ClaimTypes.Name, userName),
 | 
						|
                   new Claim(ClaimTypes.Role,"admin"),
 | 
						|
                    new Claim("password",password)
 | 
						|
            };
 | 
						|
 | 
						|
            SigningCredentials credentials = new SigningCredentials(new RsaSecurityKey(keyParams), SecurityAlgorithms.RsaSha256Signature);
 | 
						|
 | 
						|
            var token = new JwtSecurityToken(
 | 
						|
               issuer: this._JWTTokenOptions.Issuer,
 | 
						|
               audience: this._JWTTokenOptions.Audience,
 | 
						|
               claims: claims,
 | 
						|
               expires: DateTime.Now.AddMinutes(60),//5分钟有效期
 | 
						|
               signingCredentials: credentials);
 | 
						|
 | 
						|
            var handler = new JwtSecurityTokenHandler();
 | 
						|
            string tokenString = handler.WriteToken(token);
 | 
						|
            return tokenString;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |