@@ -705,12 +705,7 @@ func (s *DefaultStrategy) verifyConsent(ctx context.Context, _ http.ResponseWrit
705
705
return session , f , nil
706
706
}
707
707
708
- func (s * DefaultStrategy ) generateFrontChannelLogoutURLs (ctx context.Context , subject , sid string ) ([]string , error ) {
709
- clients , err := s .r .ConsentManager ().ListUserAuthenticatedClientsWithFrontChannelLogout (ctx , subject , sid )
710
- if err != nil {
711
- return nil , err
712
- }
713
-
708
+ func (s * DefaultStrategy ) generateFrontChannelLogoutURLs (ctx context.Context , clients []client.Client , sid string ) ([]string , error ) {
714
709
var urls []string
715
710
for _ , c := range clients {
716
711
u , err := url .Parse (c .FrontChannelLogoutURI )
@@ -727,11 +722,9 @@ func (s *DefaultStrategy) generateFrontChannelLogoutURLs(ctx context.Context, su
727
722
return urls , nil
728
723
}
729
724
730
- func (s * DefaultStrategy ) executeBackChannelLogout (r * http.Request , subject , sid string ) error {
731
- ctx := r .Context ()
732
- clients , err := s .r .ConsentManager ().ListUserAuthenticatedClientsWithBackChannelLogout (ctx , subject , sid )
733
- if err != nil {
734
- return err
725
+ func (s * DefaultStrategy ) executeBackChannelLogout (ctx context.Context , clients []client.Client , sid string ) error {
726
+ if len (clients ) == 0 {
727
+ return nil
735
728
}
736
729
737
730
openIDKeyID , err := s .r .OpenIDJWTStrategy ().GetPublicKeyID (ctx )
@@ -774,7 +767,7 @@ func (s *DefaultStrategy) executeBackChannelLogout(r *http.Request, subject, sid
774
767
span := trace .SpanFromContext (ctx )
775
768
cl := s .r .HTTPClient (ctx )
776
769
execute := func (t task ) {
777
- log := s .r .Logger ().WithRequest ( r ).
770
+ log := s .r .Logger ().
778
771
WithField ("client_id" , t .clientID ).
779
772
WithField ("backchannel_logout_url" , t .url )
780
773
@@ -999,9 +992,8 @@ func (s *DefaultStrategy) issueLogoutVerifier(ctx context.Context, w http.Respon
999
992
return nil , errorsx .WithStack (ErrAbortOAuth2Request )
1000
993
}
1001
994
1002
- func (s * DefaultStrategy ) performBackChannelLogoutAndDeleteSession (r * http.Request , subject string , sid string ) error {
1003
- ctx := r .Context ()
1004
- if err := s .executeBackChannelLogout (r , subject , sid ); err != nil {
995
+ func (s * DefaultStrategy ) performBackChannelLogoutAndDeleteSession (ctx context.Context , clients []client.Client , sid string ) error {
996
+ if err := s .executeBackChannelLogout (ctx , clients , sid ); err != nil {
1005
997
return err
1006
998
}
1007
999
@@ -1028,7 +1020,7 @@ func (s *DefaultStrategy) performBackChannelLogoutAndDeleteSession(r *http.Reque
1028
1020
func (s * DefaultStrategy ) completeLogout (ctx context.Context , w http.ResponseWriter , r * http.Request ) (* flow.LogoutResult , error ) {
1029
1021
verifier := r .URL .Query ().Get ("logout_verifier" )
1030
1022
1031
- lr , err := s .r .ConsentManager ().VerifyAndInvalidateLogoutRequest (r . Context () , verifier )
1023
+ lr , err := s .r .ConsentManager ().VerifyAndInvalidateLogoutRequest (ctx , verifier )
1032
1024
if err != nil {
1033
1025
return nil , err
1034
1026
}
@@ -1069,12 +1061,17 @@ func (s *DefaultStrategy) completeLogout(ctx context.Context, w http.ResponseWri
1069
1061
1070
1062
_ , _ = s .revokeAuthenticationCookie (w , r , store ) // Cookie removal is optional
1071
1063
1072
- urls , err := s .generateFrontChannelLogoutURLs ( r . Context () , lr .Subject , lr .SessionID )
1064
+ frontChannelClients , backChannelClients , err := s .r . ConsentManager (). ListClientsWithLogoutURLsForSubjectAndSID ( ctx , lr .Subject , lr .SessionID )
1073
1065
if err != nil {
1074
1066
return nil , err
1075
1067
}
1076
1068
1077
- if err := s .performBackChannelLogoutAndDeleteSession (r , lr .Subject , lr .SessionID ); err != nil {
1069
+ urls , err := s .generateFrontChannelLogoutURLs (ctx , frontChannelClients , lr .SessionID )
1070
+ if err != nil {
1071
+ return nil , err
1072
+ }
1073
+
1074
+ if err := s .performBackChannelLogoutAndDeleteSession (ctx , backChannelClients , lr .SessionID ); err != nil {
1078
1075
return nil , err
1079
1076
}
1080
1077
@@ -1110,7 +1107,12 @@ func (s *DefaultStrategy) HandleHeadlessLogout(ctx context.Context, _ http.Respo
1110
1107
return lsErr
1111
1108
}
1112
1109
1113
- if err := s .performBackChannelLogoutAndDeleteSession (r , loginSession .Subject , sid ); err != nil {
1110
+ _ , clients , err := s .r .ConsentManager ().ListClientsWithLogoutURLsForSubjectAndSID (ctx , loginSession .Subject , sid )
1111
+ if err != nil {
1112
+ return err
1113
+ }
1114
+
1115
+ if err := s .performBackChannelLogoutAndDeleteSession (ctx , clients , sid ); err != nil {
1114
1116
return err
1115
1117
}
1116
1118
0 commit comments