From ee4c80d01392afca809e65da1c5a7b826d8e5bb5 Mon Sep 17 00:00:00 2001 From: Lucio Maranta Date: Fri, 17 May 2019 13:04:43 +0200 Subject: [PATCH] Fix signalR auth --- Libs/CMS_CORE_Library.dll | Bin 9286144 -> 9286144 bytes Step/App_Start/Startup.cs | 3 +- Step/Attributes/SignalRAuthorizeAttribute.cs | 139 ++++++++++--------- Step/Attributes/WebApiAuthorizeAttribute.cs | 2 +- Step/Provider/SignalROAuthBearerProvider.cs | 2 +- 5 files changed, 81 insertions(+), 65 deletions(-) diff --git a/Libs/CMS_CORE_Library.dll b/Libs/CMS_CORE_Library.dll index e839b3016ee79d309232b82035db0bd6eef256c3..433f0e4dbf49313cf37036703d693c96adfc259d 100644 GIT binary patch delta 105020 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 Kfz!=y>Hh}hm)g1j delta 104927 zcmd4434Bdg_y2#+P3}#|z2}~@PY{)m5Cl;{XiRMs6;q9^Am(V5sJXPXHz6YCsNn>m z=Aosc=uMRtHAHI`Ma>#YORK0-wEwlwUh7(X6MhhM8pk|u>G+9auH@u1?)8Pj_P zS9TQ{*g8OR=>D32w7rOKuhJ$!cW932Dw3^4am7E}CQFjPAF~bIWONy9t5IYcw~;h^ z<@E`@I-HSbdFRK=75(Jd#!~ZI|bG zue~Inl;yd`o&@=(JkQwDOnyPm@jhrK50vHk-T^J-7i{tZ@0wQp=LguZFZYl~%knC3pI-7>S^m&lEScMUWSr;&MXff{UX#bmYmBO6GHs z`^(j2d4n-HMSfl0=sl4lH}#W0^+pVmOUSZU6xVLBd`8YQst=LR8im7UW)!vCiW<>F z--7|)FW4HJGSb3mL&Ntd-$Y+<)_MBKmF1I0+Da(yl=rula)2zKHX0_`ihK1B>YecUJ@Ae3ttFqialz)!#LCzN~(2H{>4weZrr^lm-5D6kOqg>+)pzHt)hf__0m=sD1-}`<)vsk?$B#N{F}X zP1(;T-!*#v244QdWX84Mpkw#E=Wl~E<@JX!qpbZIWyhy)So`Wuwo1XrxUxe%>xW(sJ1hGc5q`FNvOoV(!ie>^?SR>P*WdP)G0b5rX&klNn#uu2n8Vgl{0KFs zJ8bnJz3(B^FaS`X@os=^t;p6S(AM2nL^e9_hBj;sw8h)xqJ|t~`&|z5-VL&S&L_)8 z#de^`=ceDI#yO1X!(g>s=C%!$okmI3wp(@?=T+MbS@90nY!DW1?`O=mUY1qwfMA

Ma8ooz43ayesX7uzWLv=?R~_#@IguB#2!j`H3` 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%0AV~AZdy=UacaM*U-kR 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 c.Type == USER_ID_KEY); - - // Get machine unique id stored in the bearer token - var machineId = identity.Claims.FirstOrDefault(c => c.Type == MACHINE_ID_KEY); - - //User data not found -> not authorized - if (userId == null || machineId == null) - return false; - - // User data not found -> not authorized - if (userId == null || machineId == null) - return false; - - // check authorization - if (!CheckAuthorization(Convert.ToInt32(machineId.Value), Convert.ToInt32(userId.Value), FunctionAccess)) - return false; - - return true; - } - public override bool AuthorizeHubMethodInvocation(IHubIncomingInvokerContext hubIncomingInvokerContext, bool appliesToMethod) { - return base.AuthorizeHubMethodInvocation(hubIncomingInvokerContext, appliesToMethod); - } - - private bool CheckAuthorization(int machineId, int userId, string functionName) - { - // Check if the machine is the same where the user logged in - if (machineId != MachineConfig.MachineId) - return false; - - MachineUserModel machineUser = new MachineUserModel(); - using (MachinesUsersController machineUsersController = new MachinesUsersController()) + var connectionId = hubIncomingInvokerContext.Hub.Context.ConnectionId; + var request = hubIncomingInvokerContext.Hub.Context.Request; + var token = request.QueryString.Get("Authorization"); + if (!string.IsNullOrEmpty(token)) { - // Find machineUser data and joined to user data, role data, machine data - machineUser = machineUsersController.FindByUserId(machineId, userId); - } - - using (FunctionsAccessController acController = new FunctionsAccessController()) - { - // Read from db function levels - FunctionAccessModel functionAccess = acController.FindEnabledFunctionByName(functionName); - if (functionAccess != null && ServerConfigController.CheckAreaStatus(functionAccess.Area)) - { - if (Action == ACTIONS.READ) - { // Check read permissions - if (functionAccess.ReadLevelMin > machineUser.Role.Level) - return false; // Not authorized - } - else - { // Check write permissions - if (functionAccess.WriteLevelMin > machineUser.Role.Level) - return false; // Not authorized - } - } - else + // check authorization + if (!CheckAuthorization(FunctionAccess, token, out int machineId, out int userId)) return false; - // Authorized + var claims = new ClaimsIdentity(AUTHENTICATION_TYPE); + claims.AddClaim(new Claim(USER_ID_KEY, userId.ToString())); + claims.AddClaim(new Claim(MACHINE_ID_KEY, machineId.ToString())); + + Dictionary _DCI = new Dictionary(); + _DCI.Add("server.User", claims as IPrincipal); + hubIncomingInvokerContext.Hub.Context = new HubCallerContext(new ServerRequest(_DCI), connectionId); return true; } + return false; + } + + private bool CheckAuthorization(string functionName, string token, out int machineId, out int userId) + { + machineId = userId = 0; + using (SessionsController sessionsController = new SessionsController()) + { + // Find user session on this machine + SessionModel session = sessionsController.FindSessionByToken(token); + if (session == null) + return false; + + // Check if the machine is the same where the user logged in + if (session.MachineUser.MachineId != MachineConfig.MachineId) + return false; + + machineId = session.MachineUser.MachineId; + userId = session.MachineUser.UserId; + + MachineUserModel machineUser = new MachineUserModel(); + using (MachinesUsersController machineUsersController = new MachinesUsersController()) + { + // Find machineUser data and joined to user data, role data, machine data + machineUser = machineUsersController.FindByIdWithData(session.MachineUserId); + } + + using (FunctionsAccessController acController = new FunctionsAccessController()) + { + // Read from db function levels + FunctionAccessModel functionAccess = acController.FindEnabledFunctionByName(functionName); + if (functionAccess != null && ServerConfigController.CheckAreaStatus(functionAccess.Area)) + { + if (Action == ACTIONS.READ) + { // Check read permissions + if (functionAccess.ReadLevelMin > machineUser.Role.Level) + return false; // Not authorized + } + else + { // Check write permissions + if (functionAccess.WriteLevelMin > machineUser.Role.Level) + return false; // Not authorized + } + + // Check if PLC bit exists + if (functionAccess.PlcId != 0) + { + // Check if functionality is enabled by PLC + var functionalityIsEnabled = LastRuntimeFunctionality.Where(x => x.Name == functionName).FirstOrDefault(); + if (functionalityIsEnabled == null || functionalityIsEnabled.Enabled == false) + return false; + } + } + else + return false; + + // Authorized + return true; + } + } } } } \ No newline at end of file diff --git a/Step/Attributes/WebApiAuthorizeAttribute.cs b/Step/Attributes/WebApiAuthorizeAttribute.cs index 83e511cd..6410d5f9 100644 --- a/Step/Attributes/WebApiAuthorizeAttribute.cs +++ b/Step/Attributes/WebApiAuthorizeAttribute.cs @@ -19,7 +19,7 @@ namespace Step { public string FunctionAccess; public ACTIONS Action; - protected override bool IsAuthorized(HttpActionContext actionContext) + protected override bool IsAuthorized(HttpActionContext actionContext) { // Get token from headers if (actionContext.Request.Headers.Authorization == null) diff --git a/Step/Provider/SignalROAuthBearerProvider.cs b/Step/Provider/SignalROAuthBearerProvider.cs index e0a28557..3806cbea 100644 --- a/Step/Provider/SignalROAuthBearerProvider.cs +++ b/Step/Provider/SignalROAuthBearerProvider.cs @@ -5,7 +5,7 @@ namespace Step.Provider { public class SignalROAuthBearerProvider : OAuthBearerAuthenticationProvider { - public override Task RequestToken(OAuthRequestTokenContext context) + public override Task RequestToken(OAuthRequestTokenContext context) { var token = context.Request.Query.Get("Authorization");