From 129908badf3e785168ff6317af7723313cff4c7c Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Sat, 11 May 2024 18:03:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Model/Tiobon.Web.pdm | 149 ++++--------- .../Controllers/CommonController.cs | 2 +- .../Ghre/Ghre_CourseClassController.cs | 3 - Tiobon.Core.Api/Filter/GlobalActionFilter.cs | 2 - Tiobon.Core.Common/Attribute/QueryFilter.cs | 3 +- .../HttpContextUser/AspNetUser.cs | 203 +++++++++--------- Tiobon.Core.Common/HttpContextUser/IUser.cs | 28 ++- .../Policys/ApiResponseHandler.cs | 61 +++--- .../Middlewares/JwtTokenAuthMiddleware.cs | 132 ++++++------ .../Authentication_JWTSetup.cs | 157 +++++++------- Tiobon.Core.Services/CommonServices.cs | 8 + 11 files changed, 340 insertions(+), 408 deletions(-) diff --git a/Model/Tiobon.Web.pdm b/Model/Tiobon.Web.pdm index 91e9a8be..fb3b7caa 100644 --- a/Model/Tiobon.Web.pdm +++ b/Model/Tiobon.Web.pdm @@ -1,5 +1,5 @@ - + @@ -8555,15 +8555,13 @@ Shadow=0 1612889255 1612889255 -((-20242,-4369), (-14842,3431)) +((-17767,-4369), (-17317,3431)) ((-17542,-4369),(-17542,3431)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8577,15 +8575,13 @@ DESTINATION 0 宋体,9,N 1612889255 1612889255 -((-11673,-4294), (-6273,3506)) +((-9198,-4294), (-8748,3506)) ((-8973,-4294),(-8973,3506)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8599,15 +8595,13 @@ DESTINATION 0 宋体,9,N 1612889255 1612889255 -((-2651,-4294), (2749,3506)) +((-176,-4294), (274,3506)) ((49,-4294),(49,3506)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8621,15 +8615,13 @@ DESTINATION 0 宋体,9,N 1612889255 1612889255 -((5524,-4068), (10924,3957)) +((7999,-4068), (8449,3957)) ((8224,-4068),(8224,3957)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8643,15 +8635,13 @@ DESTINATION 0 宋体,9,N 1612889255 1612889255 -((14899,-4322), (20299,3478)) +((17374,-4322), (17824,3478)) ((17599,-4322),(17599,3478)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8665,15 +8655,13 @@ DESTINATION 0 宋体,9,N 1631110453 1631713388 -((-20566,-19163), (-15166,-13538)) +((-18091,-19163), (-17641,-13538)) ((-17866,-19163),(-17866,-13538)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8687,15 +8675,13 @@ DESTINATION 0 宋体,9,N 1637073068 1637073941 -((-11774,4837), (-6374,10987)) +((-9299,4837), (-8849,10987)) ((-9074,10987),(-9074,4837)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8709,15 +8695,13 @@ DESTINATION 0 宋体,9,N 1637151949 1637151949 -((-11925,-19688), (-6525,-13538)) +((-9450,-19688), (-9000,-13538)) ((-9225,-19688),(-9225,-13538)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -8738,7 +8722,6 @@ DESTINATION 0 宋体,9,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8761,7 +8744,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8784,7 +8766,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8807,7 +8788,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8830,7 +8810,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8853,7 +8832,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8876,7 +8854,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8899,7 +8876,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8922,7 +8898,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8945,7 +8920,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8968,7 +8942,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -8991,7 +8964,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9014,7 +8986,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9037,7 +9008,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9060,7 +9030,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9530,15 +9499,13 @@ Shadow=0 1612889277 1613576461 -((-14101,-3539), (-8701,4111)) +((-11626,-3539), (-11176,4111)) ((-11401,-3539),(-11401,4111)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -9552,15 +9519,13 @@ DESTINATION 0 宋体,9,N 1612889277 1613576461 -((-5251,-4424), (149,3901)) +((-2776,-4424), (-2326,3901)) ((-2551,-4424),(-2551,3901)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -9574,15 +9539,13 @@ DESTINATION 0 宋体,9,N 1613576414 1613576461 -((4725,-4050), (10125,3300)) +((7200,-4050), (7650,3300)) ((7425,-4050),(7425,3300)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -9596,15 +9559,13 @@ DESTINATION 0 宋体,9,N 1613577000 1613577004 -((14288,-4125), (19688,3900)) +((16763,-4125), (17213,3900)) ((16988,-4125),(16988,3900)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -9618,15 +9579,13 @@ DESTINATION 0 宋体,9,N 1613577204 1613869749 -((22575,-4162), (27975,3563)) +((23888,-4162), (26663,3563)) ((23888,-4162),(23888,-300),(26663,-300),(26663,3563)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -9640,15 +9599,13 @@ DESTINATION 0 宋体,9,N 1618220270 1618220270 -((-23212,-3599), (-17812,3900)) +((-20737,-3599), (-20287,3900)) ((-20512,-3599),(-20512,3900)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -9662,15 +9619,13 @@ DESTINATION 0 宋体,9,N 1618996307 1619014022 -((-22612,-17687), (-17212,-10612)) +((-20137,-17687), (-19687,-10612)) ((-19912,-17687),(-19912,-10612)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -9691,7 +9646,6 @@ DESTINATION 0 宋体,9,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9714,7 +9668,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9737,7 +9690,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9760,7 +9712,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9783,7 +9734,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9806,7 +9756,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9829,7 +9778,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9852,7 +9800,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9875,7 +9822,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9898,7 +9844,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9921,7 +9866,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9944,7 +9888,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9967,7 +9910,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -9990,7 +9932,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -16467,15 +16408,13 @@ Shadow=0 1630078689 1630078691 -((-19875,5199), (-14475,11574)) +((-17400,5199), (-16950,11574)) ((-17175,5199),(-17175,11574)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -16496,7 +16435,6 @@ DESTINATION 0 宋体,9,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -16519,7 +16457,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -16989,15 +16926,13 @@ Shadow=0 1656491722 1656491722 -((-21449,3675), (-16049,10500)) +((-18974,3675), (-18524,10500)) ((-18749,3675),(-18749,10500)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -17011,15 +16946,13 @@ DESTINATION 0 宋体,9,N 1656491854 1656491854 -((-21524,-5550), (-16124,2175)) +((-19049,-5550), (-18599,2175)) ((-18824,-5550),(-18824,2175)) 2 1 16711680 12632256 -CENTER 0 宋体,9,N -SOURCE 0 宋体,9,N -DESTINATION 0 宋体,9,N + 0 Arial,8,N @@ -17040,7 +16973,6 @@ DESTINATION 0 宋体,9,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -17063,7 +16995,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -17086,7 +17017,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -17109,7 +17039,6 @@ LABL 0 Arial Unicode MS,8,N 12632256 STRN 0 Arial Unicode MS,8,N DISPNAME 0 宋体,9,N -OWNRDISPNAME 0 宋体,9,N Columns 0 宋体,9,N TablePkColumns 0 宋体,9,N TableFkColumns 0 宋体,9,N @@ -102682,7 +102611,7 @@ Shadow=0 SystemManager7 1248331945 Administrator -1714120566 +1715421020 Administrator 系统管理 [FolderOptions] @@ -104662,7 +104591,7 @@ CheckRequested=Yes SystemManager11 1713342619 Administrator -1714120566 +1715421020 Administrator [DisplayPreferences] diff --git a/Tiobon.Core.Api/Controllers/CommonController.cs b/Tiobon.Core.Api/Controllers/CommonController.cs index b3bed081..77c37b23 100644 --- a/Tiobon.Core.Api/Controllers/CommonController.cs +++ b/Tiobon.Core.Api/Controllers/CommonController.cs @@ -5,7 +5,7 @@ /// [Produces("application/json")] [Route("api/Common")] -[ApiExplorerSettings(GroupName = Grouping.GroupName_System)] +[Authorize(Permissions.Name), ApiExplorerSettings(GroupName = Grouping.GroupName_System)] public class CommonController : BaseApiController { private readonly ILogger _logger; diff --git a/Tiobon.Core.Api/Controllers/Ghre/Ghre_CourseClassController.cs b/Tiobon.Core.Api/Controllers/Ghre/Ghre_CourseClassController.cs index 1d8c308e..3f058068 100644 --- a/Tiobon.Core.Api/Controllers/Ghre/Ghre_CourseClassController.cs +++ b/Tiobon.Core.Api/Controllers/Ghre/Ghre_CourseClassController.cs @@ -10,7 +10,6 @@ namespace Tiobon.Core.Api.Controllers; [ApiController, GlobalActionFilter] [Authorize(Permissions.Name), ApiExplorerSettings(GroupName = Grouping.GroupName_Ghre)] public class Ghre_CourseClassController : BaseApiController -//public class Ghre_CourseClassController : BaseController { protected IGhre_CourseClassServices _service; @@ -19,8 +18,6 @@ public class Ghre_CourseClassController : BaseApiController _service = service; } - //public Ghre_CourseClassController(IGhre_CourseClassServices service) : base(service) { } - #region 基础接口 #region 查询 diff --git a/Tiobon.Core.Api/Filter/GlobalActionFilter.cs b/Tiobon.Core.Api/Filter/GlobalActionFilter.cs index 0657dc99..b0298c3d 100644 --- a/Tiobon.Core.Api/Filter/GlobalActionFilter.cs +++ b/Tiobon.Core.Api/Filter/GlobalActionFilter.cs @@ -1,6 +1,4 @@ using Microsoft.AspNetCore.Mvc.Filters; -using System.Security.Claims; -using Tiobon.Core.Model; namespace Tiobon.Core.Api.Filter { diff --git a/Tiobon.Core.Common/Attribute/QueryFilter.cs b/Tiobon.Core.Common/Attribute/QueryFilter.cs index 605f685e..19eb41c9 100644 --- a/Tiobon.Core.Common/Attribute/QueryFilter.cs +++ b/Tiobon.Core.Common/Attribute/QueryFilter.cs @@ -119,5 +119,6 @@ public class JsonParam { public string columnValue { get; set; } public string operationKey { get; set; } - + public string token { get; set; } + } \ No newline at end of file diff --git a/Tiobon.Core.Common/HttpContextUser/AspNetUser.cs b/Tiobon.Core.Common/HttpContextUser/AspNetUser.cs index 922c4de1..aee26e77 100644 --- a/Tiobon.Core.Common/HttpContextUser/AspNetUser.cs +++ b/Tiobon.Core.Common/HttpContextUser/AspNetUser.cs @@ -1,140 +1,149 @@ -using Tiobon.Core.Common.Swagger; -using Tiobon.Core.Model; +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.IdentityModel.Tokens.Jwt; -using System.Linq; -using System.Security.Claims; +using Newtonsoft.Json; +using Tiobon.Core.Common.Swagger; +using Tiobon.Core.Model; -namespace Tiobon.Core.Common.HttpContextUser +namespace Tiobon.Core.Common.HttpContextUser; + +public class AspNetUser : IUser { - public class AspNetUser : IUser + private readonly IHttpContextAccessor _accessor; + private readonly ILogger _logger; + + public AspNetUser(IHttpContextAccessor accessor, ILogger logger) { - private readonly IHttpContextAccessor _accessor; - private readonly ILogger _logger; + _accessor = accessor; + _logger = logger; + } - public AspNetUser(IHttpContextAccessor accessor, ILogger logger) + public string Name => GetName(); + + private string GetName() + { + if (IsAuthenticated() && _accessor.HttpContext.User.Identity.Name.IsNotEmptyOrNull()) { - _accessor = accessor; - _logger = logger; + return _accessor.HttpContext.User.Identity.Name; } - - public string Name => GetName(); - - private string GetName() + else { - if (IsAuthenticated() && _accessor.HttpContext.User.Identity.Name.IsNotEmptyOrNull()) + var token = GetToken(); + if (!string.IsNullOrEmpty(token)) { - return _accessor.HttpContext.User.Identity.Name; + var getNameType = Permissions.IsUseIds4 + ? "name" + : "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"; + return GetUserInfoFromToken(getNameType, token).FirstOrDefault().ObjToString(); } - else - { - if (!string.IsNullOrEmpty(GetToken())) - { - var getNameType = Permissions.IsUseIds4 - ? "name" - : "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"; - return GetUserInfoFromToken(getNameType).FirstOrDefault().ObjToString(); - } - } - - return ""; } - public long ID => GetClaimValueByType("jti").FirstOrDefault().ObjToLong(); - public long TenantId => GetClaimValueByType("TenantId").FirstOrDefault().ObjToLong(); + return ""; + } - public bool IsAuthenticated() - { - return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false; - } + public long ID => GetClaimValueByType("jti").FirstOrDefault().ObjToLong(); + public long TenantId => GetClaimValueByType("TenantId").FirstOrDefault().ObjToLong(); + + public bool IsAuthenticated() + { + return _accessor.HttpContext?.User?.Identity?.IsAuthenticated ?? false; + } - public string GetToken() + public string GetToken() + { + var token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); + if (!token.IsNullOrEmpty()) + return token; + + //var request = _accessor.HttpContext?.Request; + //if (request != null && request?.Body != null) + //{ + // var sr = new StreamReader(request?.Body); + // var BodyData = sr.ReadToEnd(); + // var jsonParam = JsonConvert.DeserializeObject(BodyData); + + // if (jsonParam != null && !jsonParam.token.IsNullOrEmpty()) + // { + // if (_accessor.HttpContext?.Request?.Headers.Any(x => x.Key == "Authorization") == true) + // _accessor.HttpContext.Request.Headers["Authorization"] = jsonParam.token; + // else + // _accessor.HttpContext.Request.Headers.Add("Authorization", "Bearer " + jsonParam.token); + // return jsonParam.token; + // } + //} + + if (_accessor.HttpContext?.IsSuccessSwagger() == true) { - var token = _accessor.HttpContext?.Request?.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); - if (!token.IsNullOrEmpty()) + token = _accessor.HttpContext.GetSuccessSwaggerJwt(); + if (token.IsNotEmptyOrNull()) { + if (_accessor.HttpContext.User.Claims.Any(s => s.Type == JwtRegisteredClaimNames.Jti)) + return token; + + var claims = new ClaimsIdentity(GetClaimsIdentity(token)); + _accessor.HttpContext.User.AddIdentity(claims); return token; } + } - if (_accessor.HttpContext?.IsSuccessSwagger() == true) - { - token = _accessor.HttpContext.GetSuccessSwaggerJwt(); - if (token.IsNotEmptyOrNull()) - { - if (_accessor.HttpContext.User.Claims.Any(s => s.Type == JwtRegisteredClaimNames.Jti)) - { - return token; - } - - var claims = new ClaimsIdentity(GetClaimsIdentity(token)); - _accessor.HttpContext.User.AddIdentity(claims); - return token; - } - } + return token; + } - return token; - } + public List GetUserInfoFromToken(string ClaimType, string token) + { + var jwtHandler = new JwtSecurityTokenHandler(); - public List GetUserInfoFromToken(string ClaimType) + // token校验 + if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) { - var jwtHandler = new JwtSecurityTokenHandler(); - var token = ""; - - token = GetToken(); - // token校验 - if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) - { - JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token); + JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(token); - return (from item in jwtToken.Claims + return (from item in jwtToken.Claims where item.Type == ClaimType select item.Value).ToList(); - } - - return new List() { }; } - public ServiceResult MessageModel { get; set; } + return new List() { }; + } - public IEnumerable GetClaimsIdentity() - { - if (_accessor.HttpContext == null) return ArraySegment.Empty; + public ServiceResult MessageModel { get; set; } - if (!IsAuthenticated()) return GetClaimsIdentity(GetToken()); + public IEnumerable GetClaimsIdentity() + { + if (_accessor.HttpContext == null) return ArraySegment.Empty; - var claims = _accessor.HttpContext.User.Claims.ToList(); - var headers = _accessor.HttpContext.Request.Headers; - foreach (var header in headers) - { - claims.Add(new Claim(header.Key, header.Value)); - } + if (!IsAuthenticated()) return GetClaimsIdentity(GetToken()); - return claims; + var claims = _accessor.HttpContext.User.Claims.ToList(); + var headers = _accessor.HttpContext.Request.Headers; + foreach (var header in headers) + { + claims.Add(new Claim(header.Key, header.Value)); } - public IEnumerable GetClaimsIdentity(string token) - { - var jwtHandler = new JwtSecurityTokenHandler(); - // token校验 - if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) - { - var jwtToken = jwtHandler.ReadJwtToken(token); + return claims; + } - return jwtToken.Claims; - } + public IEnumerable GetClaimsIdentity(string token) + { + var jwtHandler = new JwtSecurityTokenHandler(); + // token校验 + if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) + { + var jwtToken = jwtHandler.ReadJwtToken(token); - return new List(); + return jwtToken.Claims; } - public List GetClaimValueByType(string ClaimType) - { - return (from item in GetClaimsIdentity() + return new List(); + } + + public List GetClaimValueByType(string ClaimType) + { + return (from item in GetClaimsIdentity() where item.Type == ClaimType select item.Value).ToList(); - } } } \ No newline at end of file diff --git a/Tiobon.Core.Common/HttpContextUser/IUser.cs b/Tiobon.Core.Common/HttpContextUser/IUser.cs index da394f80..a54e0945 100644 --- a/Tiobon.Core.Common/HttpContextUser/IUser.cs +++ b/Tiobon.Core.Common/HttpContextUser/IUser.cs @@ -1,21 +1,19 @@ -using System.Collections.Generic; -using System.Security.Claims; +using System.Security.Claims; using Tiobon.Core.Model; -namespace Tiobon.Core.Common.HttpContextUser +namespace Tiobon.Core.Common.HttpContextUser; + +public interface IUser { - public interface IUser - { - string Name { get; } - long ID { get; } - long TenantId { get; } - bool IsAuthenticated(); - IEnumerable GetClaimsIdentity(); - List GetClaimValueByType(string ClaimType); + string Name { get; } + long ID { get; } + long TenantId { get; } + bool IsAuthenticated(); + IEnumerable GetClaimsIdentity(); + List GetClaimValueByType(string ClaimType); - string GetToken(); - List GetUserInfoFromToken(string ClaimType); + string GetToken(); + List GetUserInfoFromToken(string ClaimType, string token); - ServiceResult MessageModel { get; set; } - } + ServiceResult MessageModel { get; set; } } \ No newline at end of file diff --git a/Tiobon.Core.Extensions/Authorizations/Policys/ApiResponseHandler.cs b/Tiobon.Core.Extensions/Authorizations/Policys/ApiResponseHandler.cs index 1851c16b..fa6af0a9 100644 --- a/Tiobon.Core.Extensions/Authorizations/Policys/ApiResponseHandler.cs +++ b/Tiobon.Core.Extensions/Authorizations/Policys/ApiResponseHandler.cs @@ -1,50 +1,47 @@ -using Tiobon.Core.Model; +using System.Text.Encodings.Web; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; -using System; -using System.Text.Encodings.Web; -using System.Threading.Tasks; using Tiobon.Core.Common.HttpContextUser; +using Tiobon.Core.Model; -namespace Tiobon.Core.AuthHelper +namespace Tiobon.Core.AuthHelper; + +public class ApiResponseHandler : AuthenticationHandler { - public class ApiResponseHandler : AuthenticationHandler + private readonly IUser _user; + + public ApiResponseHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock, IUser user) : base(options, logger, encoder, clock) { - private readonly IUser _user; + _user = user; + } - public ApiResponseHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock, IUser user) : base(options, logger, encoder, clock) - { - _user = user; - } + protected override Task HandleAuthenticateAsync() + { + throw new NotImplementedException(); + } - protected override Task HandleAuthenticateAsync() - { - throw new NotImplementedException(); - } + protected override async Task HandleChallengeAsync(AuthenticationProperties properties) + { + Response.ContentType = "application/json"; + Response.StatusCode = StatusCodes.Status401Unauthorized; + await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE401)).MessageModel)); + } - protected override async Task HandleChallengeAsync(AuthenticationProperties properties) + protected override async Task HandleForbiddenAsync(AuthenticationProperties properties) + { + Response.ContentType = "application/json"; + if (_user.MessageModel != null) { - Response.ContentType = "application/json"; - Response.StatusCode = StatusCodes.Status401Unauthorized; - await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE401)).MessageModel)); + Response.StatusCode = _user.MessageModel.Status; + await Response.WriteAsync(JsonConvert.SerializeObject(_user.MessageModel)); } - - protected override async Task HandleForbiddenAsync(AuthenticationProperties properties) + else { - Response.ContentType = "application/json"; - if (_user.MessageModel != null) - { - Response.StatusCode = _user.MessageModel.Status; - await Response.WriteAsync(JsonConvert.SerializeObject(_user.MessageModel)); - } - else - { - Response.StatusCode = StatusCodes.Status403Forbidden; - await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE403)).MessageModel)); - } + Response.StatusCode = StatusCodes.Status403Forbidden; + await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE403)).MessageModel)); } } } \ No newline at end of file diff --git a/Tiobon.Core.Extensions/Middlewares/JwtTokenAuthMiddleware.cs b/Tiobon.Core.Extensions/Middlewares/JwtTokenAuthMiddleware.cs index f52e9c00..f401d3c1 100644 --- a/Tiobon.Core.Extensions/Middlewares/JwtTokenAuthMiddleware.cs +++ b/Tiobon.Core.Extensions/Middlewares/JwtTokenAuthMiddleware.cs @@ -1,91 +1,87 @@ -using System; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; using Tiobon.Core.AuthHelper.OverWrite; -using Microsoft.AspNetCore.Http; -namespace Tiobon.Core.Extensions.Middlewares +namespace Tiobon.Core.Extensions.Middlewares; + +/// +/// 中间件 +/// 原做为自定义授权中间件 +/// 先做检查 header token的使用 +/// +public class JwtTokenAuthMiddleware { /// - /// 中间件 - /// 原做为自定义授权中间件 - /// 先做检查 header token的使用 + /// + /// + private readonly RequestDelegate _next; + /// + /// /// - public class JwtTokenAuthMiddleware + /// + public JwtTokenAuthMiddleware(RequestDelegate next) { - /// - /// - /// - private readonly RequestDelegate _next; - /// - /// - /// - /// - public JwtTokenAuthMiddleware(RequestDelegate next) - { - _next = next; - } + _next = next; + } - private void PreProceed(HttpContext next) - { - //Console.WriteLine($"{DateTime.Now} middleware invoke preproceed"); - //... - } - private void PostProceed(HttpContext next) - { - //Console.WriteLine($"{DateTime.Now} middleware invoke postproceed"); - //.... - } - - /// - /// - /// - /// - /// - public Task Invoke(HttpContext httpContext) - { - PreProceed(httpContext); + private void PreProceed(HttpContext next) + { + //Console.WriteLine($"{DateTime.Now} middleware invoke preproceed"); + //... + } + private void PostProceed(HttpContext next) + { + //Console.WriteLine($"{DateTime.Now} middleware invoke postproceed"); + //.... + } + /// + /// + /// + /// + /// + public Task Invoke(HttpContext httpContext) + { + PreProceed(httpContext); - //检测是否包含'Authorization'请求头 - if (!httpContext.Request.Headers.ContainsKey("Authorization")) - { - PostProceed(httpContext); - return _next(httpContext); - } - //var tokenHeader = httpContext.Request.Headers["Authorization"].ToString(); - var tokenHeader = httpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); + //检测是否包含'Authorization'请求头 + if (!httpContext.Request.Headers.ContainsKey("Authorization")) + { + PostProceed(httpContext); - try - { - if (tokenHeader.Length >= 128) - { - //Console.WriteLine($"{DateTime.Now} token :{tokenHeader}"); - TokenModelJwt tm = JwtHelper.SerializeJwt(tokenHeader); - - //授权 - //var claimList = new List(); - //var claim = new Claim(ClaimTypes.Role, tm.Role); - //claimList.Add(claim); - //var identity = new ClaimsIdentity(claimList); - //var principal = new ClaimsPrincipal(identity); - //httpContext.User = principal; - } + return _next(httpContext); + } + //var tokenHeader = httpContext.Request.Headers["Authorization"].ToString(); + var tokenHeader = httpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); - } - catch (Exception e) + try + { + if (tokenHeader.Length >= 128) { - Console.WriteLine($"{DateTime.Now} middleware wrong:{e.Message}"); + //Console.WriteLine($"{DateTime.Now} token :{tokenHeader}"); + TokenModelJwt tm = JwtHelper.SerializeJwt(tokenHeader); + + //授权 + //var claimList = new List(); + //var claim = new Claim(ClaimTypes.Role, tm.Role); + //claimList.Add(claim); + //var identity = new ClaimsIdentity(claimList); + //var principal = new ClaimsPrincipal(identity); + //httpContext.User = principal; } + } + catch (Exception e) + { + Console.WriteLine($"{DateTime.Now} middleware wrong:{e.Message}"); + } - PostProceed(httpContext); + PostProceed(httpContext); - return _next(httpContext); - } + return _next(httpContext); } } diff --git a/Tiobon.Core.Extensions/ServiceExtensions/Authentication_JWTSetup.cs b/Tiobon.Core.Extensions/ServiceExtensions/Authentication_JWTSetup.cs index 4b462e70..e140eddd 100644 --- a/Tiobon.Core.Extensions/ServiceExtensions/Authentication_JWTSetup.cs +++ b/Tiobon.Core.Extensions/ServiceExtensions/Authentication_JWTSetup.cs @@ -8,104 +8,103 @@ using Microsoft.IdentityModel.Tokens; using System.IdentityModel.Tokens.Jwt; using System.Text; -namespace Tiobon.Core.Extensions +namespace Tiobon.Core.Extensions; + +/// +/// JWT权限 认证服务 +/// +public static class Authentication_JWTSetup { - /// - /// JWT权限 认证服务 - /// - public static class Authentication_JWTSetup + public static void AddAuthentication_JWTSetup(this IServiceCollection services) { - public static void AddAuthentication_JWTSetup(this IServiceCollection services) - { - if (services == null) throw new ArgumentNullException(nameof(services)); + if (services == null) throw new ArgumentNullException(nameof(services)); - var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String; - var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64); - var signingKey = new SymmetricSecurityKey(keyByteArray); - var Issuer = AppSettings.app(new string[] { "Audience", "Issuer" }); - var Audience = AppSettings.app(new string[] { "Audience", "Audience" }); + var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String; + var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64); + var signingKey = new SymmetricSecurityKey(keyByteArray); + var Issuer = AppSettings.app(new string[] { "Audience", "Issuer" }); + var Audience = AppSettings.app(new string[] { "Audience", "Audience" }); - var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); + var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); - // 令牌验证参数 - var tokenValidationParameters = new TokenValidationParameters - { - ValidateIssuerSigningKey = true, - IssuerSigningKey = signingKey, - ValidateIssuer = true, - ValidIssuer = Issuer,//发行人 - ValidateAudience = true, - ValidAudience = Audience,//订阅人 - ValidateLifetime = true, - ClockSkew = TimeSpan.FromSeconds(30), - RequireExpirationTime = true, - }; + // 令牌验证参数 + var tokenValidationParameters = new TokenValidationParameters + { + ValidateIssuerSigningKey = true, + IssuerSigningKey = signingKey, + ValidateIssuer = true, + ValidIssuer = Issuer,//发行人 + ValidateAudience = true, + ValidAudience = Audience,//订阅人 + ValidateLifetime = true, + ClockSkew = TimeSpan.FromSeconds(30), + RequireExpirationTime = true, + }; - // 开启Bearer认证 - services.AddAuthentication(o => - { - o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; - o.DefaultChallengeScheme = nameof(ApiResponseHandler); - o.DefaultForbidScheme = nameof(ApiResponseHandler); - }) - // 添加JwtBearer服务 - .AddJwtBearer(o => + // 开启Bearer认证 + services.AddAuthentication(o => + { + o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; + o.DefaultChallengeScheme = nameof(ApiResponseHandler); + o.DefaultForbidScheme = nameof(ApiResponseHandler); + }) + // 添加JwtBearer服务 + .AddJwtBearer(o => + { + o.TokenValidationParameters = tokenValidationParameters; + o.Events = new JwtBearerEvents { - o.TokenValidationParameters = tokenValidationParameters; - o.Events = new JwtBearerEvents + OnMessageReceived = context => { - OnMessageReceived = context => - { - var accessToken = context.Request.Query["access_token"]; + var accessToken = context.Request.Query["access_token"]; - // If the request is for our hub... - var path = context.HttpContext.Request.Path; - if (!string.IsNullOrEmpty(accessToken) && - (path.StartsWithSegments("/api2/chathub"))) - { - // Read the token out of the query string - context.Token = accessToken; - } - return Task.CompletedTask; - }, - OnChallenge = context => + // If the request is for our hub... + var path = context.HttpContext.Request.Path; + if (!string.IsNullOrEmpty(accessToken) && + (path.StartsWithSegments("/api2/chathub"))) { - context.Response.Headers["Token-Error"] = context.ErrorDescription; - return Task.CompletedTask; - }, - OnAuthenticationFailed = context => + // Read the token out of the query string + context.Token = accessToken; + } + return Task.CompletedTask; + }, + OnChallenge = context => + { + context.Response.Headers["Token-Error"] = context.ErrorDescription; + return Task.CompletedTask; + }, + OnAuthenticationFailed = context => + { + var jwtHandler = new JwtSecurityTokenHandler(); + var token = context.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); + + if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) { - var jwtHandler = new JwtSecurityTokenHandler(); - var token = context.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); + var jwtToken = jwtHandler.ReadJwtToken(token); - if (token.IsNotEmptyOrNull() && jwtHandler.CanReadToken(token)) + if (jwtToken.Issuer != Issuer) { - var jwtToken = jwtHandler.ReadJwtToken(token); - - if (jwtToken.Issuer != Issuer) - { - context.Response.Headers["Token-Error-Iss"] = "issuer is wrong!"; - } - - if (jwtToken.Audiences.FirstOrDefault() != Audience) - { - context.Response.Headers["Token-Error-Aud"] = "Audience is wrong!"; - } + context.Response.Headers["Token-Error-Iss"] = "issuer is wrong!"; } - - // 如果过期,则把<是否过期>添加到,返回头信息中 - if (context.Exception.GetType() == typeof(SecurityTokenExpiredException)) + if (jwtToken.Audiences.FirstOrDefault() != Audience) { - context.Response.Headers["Token-Expired"] = "true"; + context.Response.Headers["Token-Error-Aud"] = "Audience is wrong!"; } - return Task.CompletedTask; } - }; - }) - .AddScheme(nameof(ApiResponseHandler), o => { }); - } + + // 如果过期,则把<是否过期>添加到,返回头信息中 + if (context.Exception.GetType() == typeof(SecurityTokenExpiredException)) + { + context.Response.Headers["Token-Expired"] = "true"; + } + return Task.CompletedTask; + } + }; + }) + .AddScheme(nameof(ApiResponseHandler), o => { }); + } } diff --git a/Tiobon.Core.Services/CommonServices.cs b/Tiobon.Core.Services/CommonServices.cs index 8d57e722..1057aae6 100644 --- a/Tiobon.Core.Services/CommonServices.cs +++ b/Tiobon.Core.Services/CommonServices.cs @@ -282,6 +282,14 @@ public partial class CommonServices : BaseServices>, ICommon if (toolbar != null) { toolbar.fnKey = "TBD1YN"; } toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "UpdateYN").FirstOrDefault(); if (toolbar != null) { toolbar.fnKey = "TBD2YN"; } + }else if (param.menuName == "F_ExamPaperDraft") + { + var toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "NewYN").FirstOrDefault(); + if (toolbar != null) { toolbar.fnKey = "TBD1YN"; } + toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "UpdateYN").FirstOrDefault(); + if (toolbar != null) { toolbar.fnKey = "TBD2YN"; } + toolbar = result.JM_PageControlT1.Toolbar.Where(x => x.fnKey == "DetailYN").FirstOrDefault(); + if (toolbar != null) { toolbar.fnKey = "TBD3YN"; } } #endregion