@@ -68,6 +68,25 @@ public async Task<AuthorizeResult> AuthorizeAsync(DisplayMode displayMode = Disp
6868 return result ;
6969 }
7070
71+ public async Task EndSessionAsync ( LogoutRequest request )
72+ {
73+ var endpoint = _options . ProviderInformation . EndSessionEndpoint ;
74+ if ( endpoint . IsMissing ( ) )
75+ {
76+ throw new InvalidOperationException ( "Discovery document has no end session endpoint" ) ;
77+ }
78+
79+ var url = CreateEndSessionUrl ( endpoint , request ) ;
80+
81+ var browserOptions = new BrowserOptions ( url , _options . PostLogoutRedirectUri ?? string . Empty )
82+ {
83+ Timeout = TimeSpan . FromSeconds ( request . BrowserTimeout ) ,
84+ DisplayMode = request . BrowserDisplayMode
85+ } ;
86+
87+ var browserResult = await _options . Browser . InvokeAsync ( browserOptions ) ;
88+ }
89+
7190 public AuthorizeState CreateAuthorizeState ( object extraParameters = null )
7291 {
7392 _logger . LogTrace ( "CreateAuthorizeStateAsync" ) ;
@@ -82,26 +101,42 @@ public AuthorizeState CreateAuthorizeState(object extraParameters = null)
82101 CodeVerifier = pkce . CodeVerifier ,
83102 } ;
84103
85- state . StartUrl = CreateUrl ( state . State , state . Nonce , pkce . CodeChallenge , extraParameters ) ;
104+ state . StartUrl = CreateAuthorizeUrl ( state . State , state . Nonce , pkce . CodeChallenge , extraParameters ) ;
86105
87106 _logger . LogDebug ( LogSerializer . Serialize ( state ) ) ;
88107
89108 return state ;
90109 }
91110
92- internal string CreateUrl ( string state , string nonce , string codeChallenge , object extraParameters )
111+ internal string CreateAuthorizeUrl ( string state , string nonce , string codeChallenge , object extraParameters )
93112 {
94- _logger . LogTrace ( "CreateUrl " ) ;
113+ _logger . LogTrace ( "CreateAuthorizeUrl " ) ;
95114
96- var parameters = CreateParameters ( state , nonce , codeChallenge , extraParameters ) ;
115+ var parameters = CreateAuthorizeParameters ( state , nonce , codeChallenge , extraParameters ) ;
97116 var request = new AuthorizeRequest ( _options . ProviderInformation . AuthorizeEndpoint ) ;
98117
99118 return request . Create ( parameters ) ;
100119 }
101120
102- internal Dictionary < string , string > CreateParameters ( string state , string nonce , string codeChallenge , object extraParameters )
121+ internal string CreateEndSessionUrl ( string endpoint , LogoutRequest request )
103122 {
104- _logger . LogTrace ( "CreateParameters" ) ;
123+ var parameters = new Dictionary < string , string > ( ) ;
124+
125+ if ( request . IdTokenHint . IsPresent ( ) )
126+ {
127+ parameters . Add ( OidcConstants . EndSessionRequest . IdTokenHint , request . IdTokenHint ) ;
128+ }
129+ if ( _options . PostLogoutRedirectUri . IsPresent ( ) )
130+ {
131+ parameters . Add ( OidcConstants . EndSessionRequest . PostLogoutRedirectUri , _options . PostLogoutRedirectUri ) ;
132+ }
133+
134+ return new AuthorizeRequest ( endpoint ) . Create ( parameters ) ;
135+ }
136+
137+ internal Dictionary < string , string > CreateAuthorizeParameters ( string state , string nonce , string codeChallenge , object extraParameters )
138+ {
139+ _logger . LogTrace ( "CreateAuthorizeParameters" ) ;
105140
106141 string responseType = null ;
107142 switch ( _options . Flow )
@@ -173,8 +208,10 @@ private Dictionary<string, string> ObjectToDictionary(object values)
173208 return null ;
174209 }
175210
176- var dictionary = values as Dictionary < string , string > ;
177- if ( dictionary != null ) return dictionary ;
211+ if ( values is Dictionary < string , string > dictionary )
212+ {
213+ return dictionary ;
214+ }
178215
179216 dictionary = new Dictionary < string , string > ( ) ;
180217
0 commit comments