4
4
using IdentityModel ;
5
5
using Microsoft . AspNetCore . Authentication ;
6
6
using Microsoft . AspNetCore . Http ;
7
+ using Microsoft . Extensions . Logging ;
7
8
using Microsoft . Extensions . Options ;
8
9
using System ;
9
10
using System . Linq ;
@@ -30,23 +31,35 @@ public class DefaultLogoutService : ILogoutService
30
31
/// The return URL validator
31
32
/// </summary>
32
33
protected readonly IReturnUrlValidator ReturnUrlValidator ;
34
+
35
+ /// <summary>
36
+ /// The logger
37
+ /// </summary>
38
+ protected readonly ILogger Logger ;
33
39
34
40
/// <summary>
35
41
/// Ctor
36
42
/// </summary>
37
43
/// <param name="options"></param>
38
44
/// <param name="authenticationAuthenticationSchemeProviderProvider"></param>
39
45
/// <param name="returnUrlValidator"></param>
40
- public DefaultLogoutService ( IOptions < BffOptions > options , IAuthenticationSchemeProvider authenticationAuthenticationSchemeProviderProvider , IReturnUrlValidator returnUrlValidator )
46
+ /// <param name="logger"></param>
47
+ public DefaultLogoutService ( IOptions < BffOptions > options ,
48
+ IAuthenticationSchemeProvider authenticationAuthenticationSchemeProviderProvider ,
49
+ IReturnUrlValidator returnUrlValidator ,
50
+ ILogger < DefaultLogoutService > logger )
41
51
{
42
52
Options = options . Value ;
43
53
AuthenticationSchemeProvider = authenticationAuthenticationSchemeProviderProvider ;
44
54
ReturnUrlValidator = returnUrlValidator ;
55
+ Logger = logger ;
45
56
}
46
57
47
58
/// <inheritdoc />
48
59
public virtual async Task ProcessRequestAsync ( HttpContext context )
49
60
{
61
+ Logger . LogDebug ( "Processing logout request" ) ;
62
+
50
63
context . CheckForBffMiddleware ( Options ) ;
51
64
52
65
var result = await context . AuthenticateAsync ( ) ;
@@ -66,12 +79,7 @@ public virtual async Task ProcessRequestAsync(HttpContext context)
66
79
}
67
80
}
68
81
69
- // get rid of local cookie first
70
- var signInScheme = await AuthenticationSchemeProvider . GetDefaultSignInSchemeAsync ( ) ;
71
- await context . SignOutAsync ( signInScheme ? . Name ) ;
72
-
73
82
var returnUrl = context . Request . Query [ Constants . RequestParameters . ReturnUrl ] . FirstOrDefault ( ) ;
74
-
75
83
if ( ! string . IsNullOrWhiteSpace ( returnUrl ) )
76
84
{
77
85
if ( ! await ReturnUrlValidator . IsValidAsync ( returnUrl ) )
@@ -80,6 +88,10 @@ public virtual async Task ProcessRequestAsync(HttpContext context)
80
88
}
81
89
}
82
90
91
+ // get rid of local cookie first
92
+ var signInScheme = await AuthenticationSchemeProvider . GetDefaultSignInSchemeAsync ( ) ;
93
+ await context . SignOutAsync ( signInScheme ? . Name ) ;
94
+
83
95
if ( String . IsNullOrWhiteSpace ( returnUrl ) )
84
96
{
85
97
if ( context . Request . PathBase . HasValue )
@@ -97,6 +109,8 @@ public virtual async Task ProcessRequestAsync(HttpContext context)
97
109
RedirectUri = returnUrl
98
110
} ;
99
111
112
+ Logger . LogDebug ( "Logout endpoint triggering SignOut with returnUrl {returnUrl}" , returnUrl ) ;
113
+
100
114
// trigger idp logout
101
115
await context . SignOutAsync ( props ) ;
102
116
}
0 commit comments