From f8fbf1db4df0d59c3387980cd46811de6359131b Mon Sep 17 00:00:00 2001 From: liaoxujun@qq.com <liaoxujun@qq.com> Date: 星期一, 21 八月 2023 14:57:04 +0800 Subject: [PATCH] 修改登录授权方式,增加zctoken登录方案,增加分布式消息队列 --- DocumentServiceAPI.Application/UserAndLogin/LogInController.cs | 236 +++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 140 insertions(+), 96 deletions(-) diff --git a/DocumentServiceAPI.Application/UserAndLogin/LogInController.cs b/DocumentServiceAPI.Application/UserAndLogin/LogInController.cs index 3478ee1..fa1f9fa 100644 --- a/DocumentServiceAPI.Application/UserAndLogin/LogInController.cs +++ b/DocumentServiceAPI.Application/UserAndLogin/LogInController.cs @@ -3,9 +3,14 @@ using DocumentServiceAPI.Utility; using Furion.DynamicApiController; using Furion.JsonSerialization; +using Microsoft.AspNetCore.Http; +using Microsoft.IdentityModel.Tokens; +using NetTaste; +using Newtonsoft.Json.Linq; using Swashbuckle.AspNetCore.Annotations; using System; using System.Collections.Generic; +using System.IdentityModel.Tokens.Jwt; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -28,133 +33,172 @@ } /// <summary> /// 鐧诲綍 1 杈撳叆鍛樺伐璐︽埛鎴栬�呯鎴疯处鎴凤紝2 閫夋嫨绉熸埛璐︽埛锛�3 閫夋嫨鍏徃 + /// 褰撳瘑鐮佷负绌烘椂锛屽甫鍏ョ敤鎴蜂腑蹇僼oken鍗冲彲瀹炵幇鐧诲綍 /// </summary> /// <returns>鐧诲綍淇℃伅</returns> [HttpPost("LogoIn")] - public async Task<RetLoginVM> LogoIn (LoginPsWordIN Parma) + public async Task<RetLoginVM> LogoIn ( LoginPsWordIN Parma) { - bool needtoken=false; - if (Parma.TenantId==null) + //zctok鏍¢獙鎴愬姛鏄惁鏍囧織 + bool IsTokenPass=false; + + if(string.IsNullOrEmpty(Parma.PassWord)) { - //濡傛灉杩樻病纭畾绉熸埛ID 闇�瑕佸厛纭畾绉熸埛ID - List<TenderVM>Tender = await _userService.GetUserTenderList(Parma.ITCode); - - switch (Tender.Count) + + var Request = App.HttpContext.Request; + string stoken = Request.Headers["Authorization"]; + if (stoken == null) + throw Oops.Oh("娌℃湁杈撳叆瀵嗙爜"); + stoken = stoken.Replace("Bearer ", ""); + + var isvale = _tokenService.CheckJwt(stoken, out SecurityToken securityToken); + JwtSecurityToken jwtToken = securityToken as JwtSecurityToken; + string itcode = jwtToken.Claims.FirstOrDefault(claim => claim.Type == "sub")?.Value; + if (isvale == false) + throw Oops.Oh("鐧诲綍淇℃伅鍑洪敊"); + if(Parma.ITCode!= itcode) + throw Oops.Oh("鐢ㄦ埛鍚嶉敊璇�"); + + + } + + bool needtoken = false; + + if (Parma.TenantId == null) { - case 0: - throw Oops.Oh($"璐︽埛鎴栬�呭瘑鐮侀敊璇�"); - case 1: - needtoken = await _userService.CheckPsw(Tender[0].TenderId, Tender[0].EmployeeID,Parma.PassWord); - - if(!needtoken) + //濡傛灉杩樻病纭畾绉熸埛ID 闇�瑕佸厛纭畾绉熸埛ID + List<TenderVM> Tender = await _userService.GetUserTenderList(Parma.ITCode); + + switch (Tender.Count) + { + case 0: throw Oops.Oh($"璐︽埛鎴栬�呭瘑鐮侀敊璇�"); - - Parma.TenantId = Tender[0].TenderId; - Parma.employeeID = Tender[0].EmployeeID; - if (Parma.UnitID == null) + case 1: + if (!needtoken) { - - List<UnitVM> Units = await _userService.GetUserUnitList(Parma.TenantId ?? 0); - if (Units.Count == 0) - { - //娌℃湁鍏徃 - needtoken = true; - } - else if (Units.Count == 1) - { - Parma.UnitID = Units[0].UnitID; - needtoken = true; - } - else - { - //鍏朵粬闇�瑕佺敤鎴烽�夋嫨绉熸埛 - return new RetLoginVM - { - NeedNext = true, - Units = Units, + needtoken = await _userService.CheckPsw(Tender[0].TenderId, Tender[0].EmployeeID, Parma.PassWord); - }; - } + if (!needtoken) + throw Oops.Oh($"璐︽埛鎴栬�呭瘑鐮侀敊璇�"); } - - break; - - default: + + + Parma.TenantId = Tender[0].TenderId; + Parma.employeeID = Tender[0].EmployeeID; + if (Parma.UnitID == null) + { + + List<UnitVM> Units = await _userService.GetUserUnitList(Parma.TenantId ?? 0); + if (Units.Count == 0) + { + //娌℃湁鍏徃 + needtoken = true; + } + else if (Units.Count == 1) + { + Parma.UnitID = Units[0].UnitID; + needtoken = true; + } + else + { + //鍏朵粬闇�瑕佺敤鎴烽�夋嫨绉熸埛 + return new RetLoginVM + { + NeedNext = true, + Units = Units, + + }; + } + } + + break; + + default: + //鍏朵粬闇�瑕佺敤鎴烽�夋嫨绉熸埛 + return new RetLoginVM + { + NeedNext = true, + Tenants = Tender, + + }; + + + } + + + + + + } + else if (Parma.UnitID == null) + { + + var Units = await _userService.GetUserUnitList(Parma.TenantId ?? 0); + if (Units.Count == 0) + { + //娌℃湁鍏徃 + needtoken = true; + } + else if (Units.Count == 1) { + Parma.UnitID = Units[0].UnitID; + needtoken = true; + } + else + { //鍏朵粬闇�瑕佺敤鎴烽�夋嫨绉熸埛 return new RetLoginVM { NeedNext = true, - Tenants = Tender, + Units = Units, }; + } - } - - - - - } - else if(Parma.UnitID==null) - { - - var Units = await _userService.GetUserUnitList(Parma.TenantId??0); - if(Units.Count==0) + if (needtoken || Parma.UnitID != null) { - //娌℃湁鍏徃 - needtoken = true; - } - else if (Units.Count==1) { - Parma.UnitID= Units[0].UnitID; - needtoken = true; - } - else + + TenderVM Tender = (await _userService.GetUserTenderList(Parma.ITCode)).Where(x => x.TenderId == Parma.TenantId && x.EmployeeID == Parma.employeeID).SingleOrDefault(); + if (Tender == null) + { + throw Oops.Oh($"璐︽埛瀵嗙爜鎴栬�呯鎴烽�夋嫨閿欒"); + } + if (!IsTokenPass) { - //鍏朵粬闇�瑕佺敤鎴烽�夋嫨绉熸埛 + needtoken = await _userService.CheckPsw(Tender.TenderId, Tender.EmployeeID, Parma.PassWord); + + if (!needtoken) + throw Oops.Oh($"璐︽埛鎴栬�呭瘑鐮侀敊璇�"); + } + var token = _tokenService.CreateToken(new Model.JwtInfo + { + EID = Tender.EmployeeID, + LogInSource = Parma.Form, + TEID = Tender.TenderId, + UID = Parma.UnitID, + }); return new RetLoginVM { - NeedNext = true, - Units = Units, + NeedNext = false, + Token = token, }; } - - } - - if(needtoken|| Parma.UnitID!=null) - { - - TenderVM Tender = (await _userService.GetUserTenderList(Parma.ITCode)).Where(x=>x.TenderId==Parma.TenantId&&x.EmployeeID==Parma.employeeID).SingleOrDefault(); - if(Tender==null) - { - throw Oops.Oh($"璐︽埛瀵嗙爜鎴栬�呯鎴烽�夋嫨閿欒"); - } - needtoken = await _userService.CheckPsw(Tender. TenderId, Tender.EmployeeID, Parma.PassWord); - - if (!needtoken) - throw Oops.Oh($"璐︽埛鎴栬�呭瘑鐮侀敊璇�"); - var token= _tokenService.CreateToken(new Model.JwtInfo - { - EID = Tender.EmployeeID, - LogInSource = Parma.Form, - TEID = Tender.TenderId, - UID = Parma.UnitID, - }); - return new RetLoginVM - { - NeedNext = false, - Token = token, - - }; - } - throw Oops.Oh($"鍙傛暟閿欒"); + throw Oops.Oh($"鍙傛暟閿欒"); + + + } - + + + + + /// <summary> /// 鑾峰彇鍏徃鍒楄〃 -- Gitblit v1.9.1