Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Logout session from taxisnet #41

Open
evchristelis opened this issue Aug 3, 2023 · 6 comments
Open

Logout session from taxisnet #41

evchristelis opened this issue Aug 3, 2023 · 6 comments

Comments

@evchristelis
Copy link

Hello,
I am facing the following issue.
We have implemented the whole flow for the login and registration as per Keycloak guidelines.
When we are trying to logout we are having 2 issues;

  1. The session is not deleted from the keycloak user's profile
  2. When we try to log in with a different user, we are being redirected to the following page instead of the initial gsis login page. I guess that's because the session/cookie on the gsis domain is not cleared.
    image

Is there any specific configuration we need to do to log out of the Keycloak session and the gsis session?

@XhmikosR
Copy link
Contributor

XhmikosR commented Oct 4, 2023

We are actually hitting a similar issue ourselves, but not in all of our apps, and we never managed to debug it.

If you could submit a PR please CC me.

Note that there aren't any real tests in the repo which makes testing any changes hard and thus we can't land something unless it's tested somehow.

@evchristelis
Copy link
Author

Dear @XhmikosR Thank you for the response!
We tried many different configurations but none worked. Do you have any workaround?
Do you want me to give you any particular configuration for you to test the issue?

Unfortunately, we do not have a Java developer so we could not help you debug this the correct way.

@kmandalas
Copy link

kmandalas commented Oct 7, 2023

In order to achieve Logout (from gsis at least), you need to do the following:

Με browser redirect – όχι με GET/POST - στο logout url όπου ορίζεται το αντίστοιχο path για να γίνεται redirection σε σελίδα της εφαρμογής-πελάτη. Το αντίστοιχο path της σελίδας θα πρέπει να συμφωνεί με το domain name που έχει δηλωθεί στην ΕΔΑ. Δηλαδή σε url:

@evchristelis
Copy link
Author

@

In order to achieve Logout (from gsis at least), you need to do the following:

Με browser redirect – όχι με GET/POST - στο logout url όπου ορίζεται το αντίστοιχο path για να γίνεται redirection σε σελίδα της εφαρμογής-πελάτη. Το αντίστοιχο path της σελίδας θα πρέπει να συμφωνεί με το domain name που έχει δηλωθεί στην ΕΔΑ. Δηλαδή σε url:

@kmandalas Με την παραπάνω μέθοδο το δοκιμάσαμε στην frontend εφαρμογή μας, αλλά

  1. γίνεται Logout στο gsis.gr αλλά όχι από τον Keycloak server καθώς το session είναι ακόμα ενεργό
  2. το redirect url αν δεν ειναι στα allowed από την ΓΓΠΣ δεν θα λειτουργήσει. Εμείς έχουμε δηλώσει το σαν allowed URL το Keycloak server ενώ κανονικά πρέπει να γίνεται return στο frontend app που δεν ειναι στα allowed URLs στην φόρμα της ΓΓΠΣ.

Το normal flow θα έπρεπε να είναι :

  1. call logout URL του Realm του Keycloak
  2. Keycloak request to logout on gsis.gr
  3. gsis.gr redirects to Keycloak
  4. Keycloak redirects to front end app

Δυστυχώς αυτό που έχουμε επιτύχει εως τώρα είναι να πάμε μέχρο το βήμα 3.

@kmandalas
Copy link

@evchristelis για το 1, σε περίπτωση χρήσης Java/Spring, επιτυγχάνεται με την δήλωση ενός LogoutSuccessHandler ως εξής:

 OidcClientInitiatedLogoutSuccessHandler oidcLogoutSuccessHandler() {
        OidcClientInitiatedLogoutSuccessHandler successHandler =
                new OidcClientInitiatedLogoutSuccessHandler(clientRegistrationRepository);
        successHandler.setPostLogoutRedirectUri(logoutSuccessUrl);
        return successHandler;
    }

και δήλωση του handler στο mail HttpSecurity configuration e.g.

.logout(l -> l.logoutUrl("/logout").logoutSuccessHandler(oidcLogoutSuccessHandler()))

Αναφορικά με το 2 τώρα, ναι θα πρέπει να δηλωθεί στην ΓΓΠΣ το URL του frontend app. Που είναι το πρόβλημα εκεί;

@evchristelis
Copy link
Author

@evchristelis για το 1, σε περίπτωση χρήσης Java/Spring, επιτυγχάνεται με την δήλωση ενός LogoutSuccessHandler ως εξής:

 OidcClientInitiatedLogoutSuccessHandler oidcLogoutSuccessHandler() {
        OidcClientInitiatedLogoutSuccessHandler successHandler =
                new OidcClientInitiatedLogoutSuccessHandler(clientRegistrationRepository);
        successHandler.setPostLogoutRedirectUri(logoutSuccessUrl);
        return successHandler;
    }

και δήλωση του handler στο mail HttpSecurity configuration e.g.

.logout(l -> l.logoutUrl("/logout").logoutSuccessHandler(oidcLogoutSuccessHandler()))

Αναφορικά με το 2 τώρα, ναι θα πρέπει να δηλωθεί στην ΓΓΠΣ το URL του frontend app. Που είναι το πρόβλημα εκεί;

Δυστυχώς δεν χρησιμοποιούμε Java στην ανάπτυξη και δεν μπορούμε να κάνουμε κάτι αντίστοιχο.
Για το 2, δυστυχώς η ΓΓΠΣ μας επιτρέπει να δηλώσουμε μόνο ένα redirect_URL.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants