Skip to content

Commit aad7ad5

Browse files
committed
Update AuthorizationHelpers.cs
1 parent b3b8168 commit aad7ad5

File tree

1 file changed

+30
-23
lines changed

1 file changed

+30
-23
lines changed

src/ModelContextProtocol/Authentication/AuthorizationHelpers.cs

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)