From 0dcb44c18754831103f9cb0c27ccbb04267d1dd5 Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Mon, 20 Jan 2025 23:48:31 +0000 Subject: [PATCH] Quite important fix When user session expires, reauthentication fails as CSRF token disappears. This commit fixes the issue by initiating new authentication flow. --- helpers.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/helpers.go b/helpers.go index 8825745..f8ba97d 100644 --- a/helpers.go +++ b/helpers.go @@ -128,11 +128,19 @@ func (t *TraefikOidc) getNewTokenWithRefreshToken(refreshToken string) (*TokenRe // handleExpiredToken manages token expiration by clearing the session // and initiating a new authentication flow. func (t *TraefikOidc) handleExpiredToken(rw http.ResponseWriter, req *http.Request, session *SessionData, redirectURL string) { - if err := session.Clear(req, rw); err != nil { - t.logger.Errorf("Failed to clear session: %v", err) + // Clear authentication data but preserve CSRF state + session.SetAuthenticated(false) + session.SetAccessToken("") + session.SetRefreshToken("") + session.SetEmail("") + + // Save the cleared session state + if err := session.Save(req, rw); err != nil { + t.logger.Errorf("Failed to save cleared session: %v", err) http.Error(rw, "Internal Server Error", http.StatusInternalServerError) return } + t.defaultInitiateAuthentication(rw, req, session, redirectURL) }