@@ -312,7 +312,7 @@ func (s *Server) updateOfflineSession(ctx context.Context, refresh *storage.Refr
312312}
313313
314314// updateRefreshToken updates refresh token and offline session in the storage
315- func (s * Server ) updateRefreshToken (ctx context.Context , rCtx * refreshContext ) (* internal.RefreshToken , connector.Identity , * refreshError ) {
315+ func (s * Server ) updateRefreshToken (ctx context.Context , rCtx * refreshContext , userIdent * storage. UserIdentity ) (* internal.RefreshToken , connector.Identity , * refreshError ) {
316316 var rerr * refreshError
317317
318318 newToken := & internal.RefreshToken {
@@ -337,17 +337,6 @@ func (s *Server) updateRefreshToken(ctx context.Context, rCtx *refreshContext) (
337337 // stored in UserIdentity at the time of the last interactive login. This aligns with the
338338 // behavior of other identity brokers (e.g., Keycloak, Auth0) that treat downstream sessions
339339 // independently from the upstream provider session lifetime.
340- var userIdent * storage.UserIdentity
341- if s .sessionConfig != nil {
342- ui , err := s .storage .GetUserIdentity (ctx , rCtx .storageToken .Claims .UserID , rCtx .storageToken .ConnectorID )
343- if err != nil {
344- s .logger .ErrorContext (ctx , "failed to get user identity for refresh" ,
345- "user_id" , rCtx .storageToken .Claims .UserID , "connector_id" , rCtx .storageToken .ConnectorID , "err" , err )
346- return nil , ident , newInternalServerError ()
347- }
348- userIdent = & ui
349- }
350-
351340 refreshTokenUpdater := func (old storage.RefreshToken ) (storage.RefreshToken , error ) {
352341 rotationEnabled := s .refreshTokenPolicy .RotationEnabled ()
353342 reusingAllowed := s .refreshTokenPolicy .AllowedToReuse (old .LastUsed )
@@ -457,7 +446,24 @@ func (s *Server) handleRefreshToken(w http.ResponseWriter, r *http.Request, clie
457446 return
458447 }
459448
460- newToken , ident , rerr := s .updateRefreshToken (r .Context (), rCtx )
449+ var userIdent * storage.UserIdentity
450+
451+ if s .sessionConfig != nil {
452+ ui , err := s .storage .GetUserIdentity (r .Context (), rCtx .storageToken .Claims .UserID , rCtx .storageToken .ConnectorID )
453+ if err != nil {
454+ s .logger .ErrorContext (r .Context (), "failed to get user identity" , "err" , err )
455+ s .refreshTokenErrHelper (w , newInternalServerError ())
456+ return
457+ }
458+ userIdent = & ui
459+ }
460+
461+ authTime := time.Time {}
462+ if userIdent != nil {
463+ authTime = userIdent .LastLogin
464+ }
465+
466+ newToken , ident , rerr := s .updateRefreshToken (r .Context (), rCtx , userIdent )
461467 if rerr != nil {
462468 s .refreshTokenErrHelper (w , rerr )
463469 return
@@ -472,17 +478,6 @@ func (s *Server) handleRefreshToken(w http.ResponseWriter, r *http.Request, clie
472478 Groups : ident .Groups ,
473479 }
474480
475- authTime := time.Time {}
476- if s .sessionConfig != nil {
477- ui , err := s .storage .GetUserIdentity (r .Context (), ident .UserID , rCtx .storageToken .ConnectorID )
478- if err != nil {
479- s .logger .ErrorContext (r .Context (), "failed to get user identity" , "err" , err )
480- s .refreshTokenErrHelper (w , newInternalServerError ())
481- return
482- }
483- authTime = ui .LastLogin
484- }
485-
486481 accessToken , _ , err := s .newAccessToken (r .Context (), client .ID , claims , rCtx .scopes , rCtx .storageToken .Nonce , rCtx .storageToken .ConnectorID , authTime )
487482 if err != nil {
488483 s .logger .ErrorContext (r .Context (), "failed to create new access token" , "err" , err )
0 commit comments