From 577787ed6ddd1cc2bc6e824664553f42a265334e Mon Sep 17 00:00:00 2001 From: mbarnech Date: Thu, 26 Jan 2023 10:26:48 -0300 Subject: [PATCH 1/3] Changes into SecurityProvider interface and Logout middleware to support SLO in angular. --- .../GxClasses/Middleware/GXHttpServices.cs | 22 ++++++++++++++++--- .../GxClasses/Security/GxSecurityProvider.cs | 6 +++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs b/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs index 50d7444e1..5f1618290 100644 --- a/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs +++ b/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs @@ -473,12 +473,28 @@ public GXOAuthLogout() public override void webExecute() { + string genexus_agent = localHttpContext.Request.Headers["Genexus-Agent"]; try { - GxSecurityProvider.Provider.oauthlogout(context); + GxSecurityProvider.Provider.oauthlogout(context, out string URL, out short statusCode); + + if (statusCode == 303) + localHttpContext.Response.StatusCode = (int)HttpStatusCode.OK; + else + localHttpContext.Response.StatusCode = statusCode; + + JObject jObj = new JObject(); + if (genexus_agent == "WebFrontend Application" && URL.Length > 0) + { + localHttpContext.Response.AddHeader("GXLocation", URL); + jObj.Put("GXLocation", URL); + } + else + { + jObj.Put("code", statusCode.ToString()); + } + localHttpContext.Response.Write(jObj.ToString()); localHttpContext.Response.ContentType = MediaTypesNames.ApplicationJson; - localHttpContext.Response.StatusCode = 200; - localHttpContext.Response.Write(new JObject().ToString()); context.CloseConnections(); } catch (Exception e) diff --git a/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs b/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs index c8d535fcc..9d0b0039d 100644 --- a/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs +++ b/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs @@ -30,7 +30,7 @@ public interface ISecurityProvider GxResult oauthauthentication(IGxContext context, String grantType, String userName, String userPassword, String clientId, String clientSecret, String scope, out OutData outData, out String URL, out bool flag); GxResult oauthauthentication(IGxContext context, String grantType, String userName, String userPassword, String clientId, String clientSecret, String scope, String additionalParameters, out OutData outData, out String URL, out bool flag); void oauthgetuser(IGxContext context, out String userJson, out bool isOK); - void oauthlogout(IGxContext context); + void oauthlogout(IGxContext context, out String URL, out short statusCode); } public class GxSecurityProvider @@ -158,8 +158,10 @@ public void oauthgetuser(IGxContext context, out string userJson, out bool isOK) isOK = false; } - public void oauthlogout(IGxContext context) + public void oauthlogout(IGxContext context, out string URL, out short statusCode) { + URL = string.Empty; + statusCode = 0; } } From f1c4b6df79444c2794684e6d2e57acd18dfce481 Mon Sep 17 00:00:00 2001 From: mbarnech Date: Thu, 26 Jan 2023 12:23:28 -0300 Subject: [PATCH 2/3] Resolve review for compatibility issues. Keep old signature and add the new one to avoid breaking the interface. --- .../GxClasses/Security/GxSecurityProvider.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs b/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs index 9d0b0039d..fc6d125bf 100644 --- a/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs +++ b/dotnet/src/dotnetframework/GxClasses/Security/GxSecurityProvider.cs @@ -30,8 +30,8 @@ public interface ISecurityProvider GxResult oauthauthentication(IGxContext context, String grantType, String userName, String userPassword, String clientId, String clientSecret, String scope, out OutData outData, out String URL, out bool flag); GxResult oauthauthentication(IGxContext context, String grantType, String userName, String userPassword, String clientId, String clientSecret, String scope, String additionalParameters, out OutData outData, out String URL, out bool flag); void oauthgetuser(IGxContext context, out String userJson, out bool isOK); + void oauthlogout(IGxContext context); void oauthlogout(IGxContext context, out String URL, out short statusCode); - } public class GxSecurityProvider { @@ -158,6 +158,10 @@ public void oauthgetuser(IGxContext context, out string userJson, out bool isOK) isOK = false; } + public void oauthlogout(IGxContext context) + { + } + public void oauthlogout(IGxContext context, out string URL, out short statusCode) { URL = string.Empty; From 2412c917fc7b14c5000f873319a9e8f1d1485550 Mon Sep 17 00:00:00 2001 From: mbarnech Date: Fri, 10 Mar 2023 09:23:22 -0300 Subject: [PATCH 3/3] Resolve PR concern abour using HttpStatusCode.SeeOther instead of code 303 directly --- .../src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs b/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs index 5f1618290..21f80bd1a 100644 --- a/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs +++ b/dotnet/src/dotnetframework/GxClasses/Middleware/GXHttpServices.cs @@ -478,7 +478,7 @@ public override void webExecute() { GxSecurityProvider.Provider.oauthlogout(context, out string URL, out short statusCode); - if (statusCode == 303) + if (statusCode == (int)HttpStatusCode.SeeOther) localHttpContext.Response.StatusCode = (int)HttpStatusCode.OK; else localHttpContext.Response.StatusCode = statusCode;