206 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
	
using System;
 | 
						|
using System.IO;
 | 
						|
using System.Security.Cryptography;
 | 
						|
using IRaCIS.Core.Infrastructure.Extention;
 | 
						|
using Microsoft.AspNetCore.Mvc;
 | 
						|
using Microsoft.Extensions.Configuration;
 | 
						|
using Microsoft.Extensions.Logging;
 | 
						|
using Newtonsoft.Json;
 | 
						|
using ZhiZhun.AuthenticationCenter.Utility;
 | 
						|
using ZhiZhun.AuthenticationCenter.Utility.RSA;
 | 
						|
 | 
						|
namespace Zhaoxi.NET6.AuthenticationCenter.Controllers
 | 
						|
{
 | 
						|
    [Route("api/[controller]")]
 | 
						|
    [ApiController]
 | 
						|
    public class JWTController : ControllerBase
 | 
						|
    {
 | 
						|
        #region MyRegion
 | 
						|
        private ILogger<JWTController> _logger = null;
 | 
						|
        private IJWTService _iJWTService = null;
 | 
						|
        private readonly IConfiguration _iConfiguration;
 | 
						|
        public JWTController(ILoggerFactory factory,
 | 
						|
            ILogger<JWTController> logger,
 | 
						|
            IConfiguration configuration
 | 
						|
            , IJWTService service)
 | 
						|
        {
 | 
						|
            this._logger = logger;
 | 
						|
            this._iConfiguration = configuration;
 | 
						|
            this._iJWTService = service;
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        [Route("GetKey")]
 | 
						|
        [HttpGet]
 | 
						|
        public string GetKey()
 | 
						|
        {
 | 
						|
            string keyDir = Directory.GetCurrentDirectory();
 | 
						|
            if (RSAHelper.TryGetKeyParameters(keyDir, false, out RSAParameters keyParams) == false)
 | 
						|
            {
 | 
						|
                keyParams = RSAHelper.GenerateAndSaveKey(keyDir, false);
 | 
						|
            }
 | 
						|
 | 
						|
            return JsonConvert.SerializeObject(keyParams);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 数据库校验
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="name"></param>
 | 
						|
        /// <param name="password"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [Route("Login")]
 | 
						|
        [HttpPost]
 | 
						|
        public IResponseOutput Login([FromForm] string name, [FromForm] string password)
 | 
						|
        {
 | 
						|
            Console.WriteLine($"This is Login name={name} password={password}");
 | 
						|
            if ("Eleven".Equals(name, StringComparison.OrdinalIgnoreCase) && "123456".Equals(password))//应该数据库
 | 
						|
            {
 | 
						|
                UserBasicInfo currentUser = new UserBasicInfo()
 | 
						|
                {
 | 
						|
                    //Id = 123,
 | 
						|
                    //Account = "xuyang@zhaoxiEdu.Net",
 | 
						|
                    //EMail = "57265177@qq.com",
 | 
						|
                    //Mobile = "18664876671",
 | 
						|
                    //Sex = 1,
 | 
						|
                    //Age = 33,
 | 
						|
                    //Name = "Eleven",
 | 
						|
                    //Role = "Admin"
 | 
						|
                };
 | 
						|
 | 
						|
                string token = this._iJWTService.GetToken(currentUser);
 | 
						|
                if (!string.IsNullOrEmpty(token))
 | 
						|
                {
 | 
						|
                    return ResponseOutput.Ok("Token颁发成功");
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
				
 | 
						|
 | 
						|
					return ResponseOutput.NotOk("Token获取失败");
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
 | 
						|
			 return   ResponseOutput.NotOk("验证失败");
 | 
						|
             
 | 
						|
             
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 生成Token+RefreshToken
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="name"></param>
 | 
						|
        /// <param name="password"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [Route("LoginWithRefresh")]
 | 
						|
        [HttpPost]
 | 
						|
        public IResponseOutput LoginWithRefresh([FromForm] string name, [FromForm] string password)
 | 
						|
        {
 | 
						|
            Console.WriteLine($"This is LoginWithRefresh name={name} password={password}");
 | 
						|
 | 
						|
            if ("Eleven".Equals(name, StringComparison.OrdinalIgnoreCase) && "123456".Equals(password))//应该数据库
 | 
						|
            {
 | 
						|
                UserBasicInfo currentUser = new UserBasicInfo()
 | 
						|
                {
 | 
						|
                    //Id = 123,
 | 
						|
                    //Account = "xuyang@zhaoxiEdu.Net",
 | 
						|
                    //EMail = "57265177@qq.com",
 | 
						|
                    //Mobile = "18664876671",
 | 
						|
                    //Sex = 1,
 | 
						|
                    //Age = 33,
 | 
						|
                    //Name = "Eleven",
 | 
						|
                    //Role = "Admin"
 | 
						|
                };
 | 
						|
 | 
						|
                var tokenPair = this._iJWTService.GetTokenWithRefresh(currentUser);
 | 
						|
                if (tokenPair != null && !string.IsNullOrEmpty(tokenPair.Item1))
 | 
						|
                {
 | 
						|
 | 
						|
                    return ResponseOutput.Ok(new {
 | 
						|
                        Token = tokenPair.Item1,
 | 
						|
                        RefreshToken = tokenPair.Item2});
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
 | 
						|
 | 
						|
                    return ResponseOutput.NotOk("颁发token失败");
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
 | 
						|
                return ResponseOutput.NotOk("验证失败");
 | 
						|
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        [Route("RefreshToken")]
 | 
						|
        [HttpPost]
 | 
						|
        public IResponseOutput RefreshToken([FromForm] string refreshToken)
 | 
						|
        {
 | 
						|
 | 
						|
            var token = this._iJWTService.GetTokenByRefresh(refreshToken);
 | 
						|
            if (!string.IsNullOrEmpty(token))
 | 
						|
            {
 | 
						|
 | 
						|
                return ResponseOutput.Ok("刷新Token成功");
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
 | 
						|
                return ResponseOutput.NotOk("刷新token失败");
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            #region Check refreshToken
 | 
						|
            //string sResult = JWTTokenDeserialize.AnalysisToken(refreshToken);
 | 
						|
            //var refreshTokenResult = await base.HttpContext.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme);
 | 
						|
            //var expires = refreshTokenResult?.Principal?.Claims?.First(c => c.Type.Equals("expires"))?.Value ?? DateTime.Now.AddMinutes(-1).ToString();
 | 
						|
            //if (DateTime.Parse(expires) > DateTime.Now)//有效期验证
 | 
						|
            //{
 | 
						|
            //    var token = this._iJWTService.GetTokenByRefresh(refreshToken);
 | 
						|
            //    if (!string.IsNullOrEmpty(token))
 | 
						|
            //    {
 | 
						|
            //        return JsonConvert.SerializeObject(new AjaxResult<string>()
 | 
						|
            //        {
 | 
						|
            //            Result = true,
 | 
						|
            //            Message = "刷新Token成功",
 | 
						|
            //            TValue = token,
 | 
						|
            //            OtherValue = refreshToken//写在OtherValue
 | 
						|
            //        });
 | 
						|
            //    }
 | 
						|
            //    else
 | 
						|
            //    {
 | 
						|
            //        return JsonConvert.SerializeObject(new AjaxResult<string>()
 | 
						|
            //        {
 | 
						|
            //            Result = false,
 | 
						|
            //            Message = "刷新token失败",
 | 
						|
            //            TValue = ""
 | 
						|
            //        });
 | 
						|
            //    }
 | 
						|
            //}
 | 
						|
            //else
 | 
						|
            //{
 | 
						|
            //    return JsonConvert.SerializeObject(new AjaxResult<string>()
 | 
						|
            //    {
 | 
						|
            //        Result = false,
 | 
						|
            //        Message = "RefreshToken过期了",
 | 
						|
            //        TValue = ""
 | 
						|
            //    });
 | 
						|
            //}
 | 
						|
 | 
						|
            #endregion
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |