From e16a24233c05d932efd57c83d1e0b1ab64859f7d Mon Sep 17 00:00:00 2001 From: Alex Smith <67177275+Ajsmith1435@users.noreply.github.com> Date: Tue, 14 Oct 2025 15:09:26 -0600 Subject: [PATCH] sso(authentik): always surface current provider refresh token from exchange --- src/sso_client.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/sso_client.rs b/src/sso_client.rs index 3d2a3c48..1336af64 100644 --- a/src/sso_client.rs +++ b/src/sso_client.rs @@ -240,11 +240,19 @@ impl Client { Ok(token_response) => token_response, }; - Ok(( - token_response.refresh_token().map(|token| token.secret().clone()), - token_response.access_token().secret().clone(), - token_response.expires_in(), - )) + // Always surface a refresh token: + // - If the IdP (e.g., Authentik) returned a rotated one, use it. + // - Otherwise, keep using the one we just used for this request. + let access = token_response.access_token().secret().clone(); + let expires_in = token_response.expires_in(); + + let new_refresh = token_response + .refresh_token() + .map(|t| t.secret().clone()) + .unwrap_or_else(|| rt.secret().clone()); + + Ok((Some(new_refresh), access, expires_in)) + } }