From 0254816657dbcb8f7ffec3f0816dc87e04cff22a Mon Sep 17 00:00:00 2001 From: Muhammad Azeez Date: Mon, 18 Jan 2021 22:12:13 +0300 Subject: [PATCH] redirect back to the client after logout :D --- CSharp/AuthorizationServer/AuthorizationServer.csproj | 4 ++-- CSharp/AuthorizationServer/Config.cs | 9 ++++----- .../Quickstart/Account/AccountController.cs | 9 ++++++++- README.md | 2 +- React/real-estate/src/pages/components/Navbar.js | 4 ++-- React/real-estate/src/services/userService.js | 10 +++++++--- React/traffic-police/src/pages/components/Navbar.js | 4 ++-- React/traffic-police/src/services/userService.js | 10 +++++++--- 8 files changed, 33 insertions(+), 19 deletions(-) diff --git a/CSharp/AuthorizationServer/AuthorizationServer.csproj b/CSharp/AuthorizationServer/AuthorizationServer.csproj index 0cbdc02..1ec2ef8 100644 --- a/CSharp/AuthorizationServer/AuthorizationServer.csproj +++ b/CSharp/AuthorizationServer/AuthorizationServer.csproj @@ -1,7 +1,7 @@ - net5.0 + netcoreapp3.1 @@ -11,7 +11,7 @@ - + diff --git a/CSharp/AuthorizationServer/Config.cs b/CSharp/AuthorizationServer/Config.cs index 704a0a7..1293e0a 100644 --- a/CSharp/AuthorizationServer/Config.cs +++ b/CSharp/AuthorizationServer/Config.cs @@ -82,9 +82,8 @@ namespace OidcSamples.AuthorizationServer RequirePkce = true, PostLogoutRedirectUris = { - "http://localhost:3000/signout-callback-oidc" + "http://localhost:3000" }, - RequireConsent = false, }, new Client @@ -113,9 +112,8 @@ namespace OidcSamples.AuthorizationServer RequirePkce = true, PostLogoutRedirectUris = { - "http://localhost:4000/signout-callback-oidc" + "http://localhost:4000" }, - RequireConsent = false, }, new Client @@ -148,7 +146,8 @@ namespace OidcSamples.AuthorizationServer { "http://localhost:7000/signout-callback-oidc" }, - + FrontChannelLogoutUri = "http://localhost:7000/signout-callback-oidc", + FrontChannelLogoutSessionRequired = true, RequireConsent = false, } }; diff --git a/CSharp/AuthorizationServer/Quickstart/Account/AccountController.cs b/CSharp/AuthorizationServer/Quickstart/Account/AccountController.cs index 25e3a9e..1226ac4 100644 --- a/CSharp/AuthorizationServer/Quickstart/Account/AccountController.cs +++ b/CSharp/AuthorizationServer/Quickstart/Account/AccountController.cs @@ -241,7 +241,14 @@ namespace IdentityServerHost.Quickstart.UI return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme); } - return View("LoggedOut", vm); + if (string.IsNullOrEmpty(vm.PostLogoutRedirectUri)) + { + return View("LoggedOut", vm); + } + else + { + return Redirect(vm.PostLogoutRedirectUri); + } } [HttpGet] diff --git a/README.md b/README.md index 793bb55..a68c70d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ We are using IdentityServer 4 to implement our Authorization Server. You can fin **Dependencies:** -- [.NET 5 SDK](https://dotnet.microsoft.com/download/dotnet/5.0) +- [.NET Core 3.1 SDK](https://dotnet.microsoft.com/download/dotnet-core/3.1) (Because the latest version that IdentityServer4 supports is .NET Core 3.1) **How to run:** diff --git a/React/real-estate/src/pages/components/Navbar.js b/React/real-estate/src/pages/components/Navbar.js index e42af5d..6fcf7d8 100644 --- a/React/real-estate/src/pages/components/Navbar.js +++ b/React/real-estate/src/pages/components/Navbar.js @@ -14,8 +14,8 @@ const Navbar = () => { const user = useSelector((state) => state.auth.user); - function signOut() { - signoutRedirect(); + async function signOut() { + await signoutRedirect(); } return ( diff --git a/React/real-estate/src/services/userService.js b/React/real-estate/src/services/userService.js index a3156a7..21db0ab 100644 --- a/React/real-estate/src/services/userService.js +++ b/React/real-estate/src/services/userService.js @@ -7,7 +7,7 @@ const config = { redirect_uri: "http://localhost:4000/signin-oidc", response_type: "code", scope: "openid profile real-estate-api", - post_logout_redirect_uri: "http://localhost:4000/signout-oidc", + post_logout_redirect_uri: "http://localhost:4000", }; const userManager = new UserManager(config); @@ -33,10 +33,14 @@ export function signinRedirectCallback() { return userManager.signinRedirectCallback(); } -export function signoutRedirect() { +export async function signoutRedirect() { + var user = await userManager.getUser(); + let id_token = null; + if (user) id_token = user.id_token; + userManager.clearStaleState(); userManager.removeUser(); - return userManager.signoutRedirect(); + return userManager.signoutRedirect({ id_token_hint: id_token }); } export function signoutRedirectCallback() { diff --git a/React/traffic-police/src/pages/components/Navbar.js b/React/traffic-police/src/pages/components/Navbar.js index e2b48b0..e59828f 100644 --- a/React/traffic-police/src/pages/components/Navbar.js +++ b/React/traffic-police/src/pages/components/Navbar.js @@ -14,8 +14,8 @@ const Navbar = () => { const user = useSelector((state) => state.auth.user); - function signOut() { - signoutRedirect(); + async function signOut() { + await signoutRedirect(); } return ( diff --git a/React/traffic-police/src/services/userService.js b/React/traffic-police/src/services/userService.js index c03c5a5..4f5ef50 100644 --- a/React/traffic-police/src/services/userService.js +++ b/React/traffic-police/src/services/userService.js @@ -7,7 +7,7 @@ const config = { redirect_uri: "http://localhost:3000/signin-oidc", response_type: "code", scope: "openid profile traffic-police-api", - post_logout_redirect_uri: "http://localhost:3000/signout-oidc", + post_logout_redirect_uri: "http://localhost:3000" }; const userManager = new UserManager(config); @@ -33,10 +33,14 @@ export function signinRedirectCallback() { return userManager.signinRedirectCallback(); } -export function signoutRedirect() { +export async function signoutRedirect() { + var user = await userManager.getUser(); + let id_token = null; + if (user) id_token = user.id_token; + userManager.clearStaleState(); userManager.removeUser(); - return userManager.signoutRedirect(); + return userManager.signoutRedirect({ id_token_hint: id_token }); } export function signoutRedirectCallback() {