@@ -22,7 +22,7 @@ use actix_web::{
2222 HttpRequest , HttpResponse ,
2323 cookie:: { Cookie , SameSite , time} ,
2424 http:: header:: { self , ContentType } ,
25- web:: { self , Data } ,
25+ web:: { self } ,
2626} ;
2727use chrono:: { Duration , TimeDelta } ;
2828use http:: StatusCode ;
@@ -149,13 +149,11 @@ pub async fn login(
149149}
150150
151151pub async fn logout ( req : HttpRequest , query : web:: Query < RedirectAfterLogin > ) -> HttpResponse {
152- let oidc_client = match req. app_data :: < Data < Option < DiscoveredClient > > > ( ) {
153- Some ( client) => {
154- let c = client. clone ( ) . into_inner ( ) ;
155- c. as_ref ( ) . clone ( )
156- }
152+ let oidc_client = match OIDC_CLIENT . get ( ) {
153+ Some ( c) => Some ( c. as_ref ( ) . unwrap ( ) . read ( ) . await . client ( ) . clone ( ) ) ,
157154 None => None ,
158155 } ;
156+
159157 let Some ( session) = extract_session_key_from_req ( & req) . ok ( ) else {
160158 return redirect_to_client ( query. redirect . as_str ( ) , None ) ;
161159 } ;
@@ -418,12 +416,8 @@ pub async fn request_token(
418416 . unwrap ( )
419417 . connect ( & format ! ( "{API_BASE_PATH}/{API_VERSION}/o/code" ) )
420418 . await ?;
421- let mut token: Token < Claims > = new_client. request_token ( & login_query. code ) . await ?. into ( ) ;
422- let id_token = if let Some ( token) = token. id_token . as_mut ( ) {
423- token
424- } else {
425- return Err ( anyhow:: anyhow!( "No id_token provided" ) ) ;
426- } ;
419+
420+ // Reuse the already-obtained token, just decode with new client's JWKS
427421 new_client. decode_token ( id_token) ?;
428422 new_client. validate_token ( id_token, None , None ) ?;
429423 let claims = id_token. payload ( ) . expect ( "payload is decoded" ) . clone ( ) ;
@@ -437,7 +431,7 @@ pub async fn request_token(
437431 oidc_client. write ( ) . await . set ( new_client) ;
438432 return Ok ( ( claims, userinfo, bearer) ) ;
439433 }
440- old_client . decode_token ( id_token ) ? ;
434+
441435 old_client. validate_token ( id_token, None , None ) ?;
442436 let claims = id_token. payload ( ) . expect ( "payload is decoded" ) . clone ( ) ;
443437
0 commit comments