@@ -148,30 +148,37 @@ public async Task<ProtectedResourceMetadata> ExtractProtectedResourceMetadata(
148148 private static string ? ParseWwwAuthenticateParameters ( string parameters , string parameterName )
149149 {
150150 // Handle parameters in the format: param1="value1", param2="value2"
151- var paramDict = parameters . Split ( ',' )
152- . Select ( p => p . Trim ( ) )
153- . Select ( p =>
151+ var paramParts = parameters . Split ( ',' ) ;
152+ Dictionary < string , string ? > paramDict = new ( paramParts . Length ) ;
153+
154+ foreach ( var part in paramParts )
155+ {
156+ var trimmedPart = part . Trim ( ) ;
157+ var keyValuePair = trimmedPart . Split ( [ '=' ] , 2 ) ;
158+
159+ if ( keyValuePair . Length != 2 )
154160 {
155- var parts = p . Split ( [ '=' ] , 2 ) ;
156- if ( parts . Length != 2 )
157- {
158- return new KeyValuePair < string , string ? > ( string . Empty , null ) ;
159- }
160-
161- var key = parts [ 0 ] . Trim ( ) ;
162- var value = parts [ 1 ] . Trim ( ) ;
163-
164- // Remove surrounding quotes if present
165- if ( value . StartsWith ( " \" " ) && value . EndsWith ( " \" " ) )
166- {
167- value = value . Substring ( 1 , value . Length - 2 ) ;
168- }
169-
170- return new KeyValuePair < string , string ? > ( key , value ) ;
171- } )
172- . Where ( kvp => ! string . IsNullOrEmpty ( kvp . Key ) )
173- . ToDictionary ( ) ;
161+ continue ;
162+ }
163+
164+ var key = keyValuePair [ 0 ] . Trim ( ) ;
165+ if ( string . IsNullOrEmpty ( key ) )
166+ {
167+ continue ;
168+ }
169+
170+ var value = keyValuePair [ 1 ] . Trim ( ) ;
171+
172+ // Remove surrounding quotes if present
173+ if ( value . Length >= 2 && value [ 0 ] == '"' && value [ ^ 1 ] == '"' )
174+ {
175+ value = value . Substring ( 1 , value . Length - 2 ) ;
176+ }
177+
178+ paramDict [ key ] = value ;
179+ }
174180
175- return paramDict . TryGetValue ( parameterName , out var value ) ? value : null ;
181+ paramDict . TryGetValue ( parameterName , out var result ) ;
182+ return result ;
176183 }
177184}
0 commit comments