public RequestMessageContext GetApiKeyFromAuthorizationHeader() { this.Logger.LogDebug($"Attempting to retrieve API key value from Authorization header."); var message = new RequestMessageContext(); if (!this.Request.Headers.TryGetValue(AuthorizationHeader, out Microsoft.Extensions.Primitives.StringValues headerValue)) { message.Result = AuthenticateResult.NoResult(); return(message); } if (!AuthorizationHeaderValue.TryParse(headerValue, out AuthorizationHeaderValue auth_header)) { message.Result = AuthenticateResult.NoResult(); return(message); } if (!auth_header.AuthenticationType.Equals(this.Options.AuthenticationType, StringComparison.OrdinalIgnoreCase)) { message.Result = AuthenticateResult.NoResult(); return(message); } string[] valueParts = auth_header.Value.Split(':'); if (valueParts.Length != 2) { message.Result = AuthenticateResult.Fail("Invalid API Key format."); return(message); } message.Key = new ApiKey() { ClientID = valueParts[0], Secret = valueParts[1] }; return(message); }
public static bool TryParse(Microsoft.Extensions.Primitives.StringValues authorizationHeaderValue, out AuthorizationHeaderValue values) { if (authorizationHeaderValue.Count != 1) { throw new ArgumentException("Header value must contain one and only one value.", nameof(authorizationHeaderValue)); } values = new AuthorizationHeaderValue(); var rawValue = authorizationHeaderValue[0].AsSpan(); var indexOfFirstSpace = rawValue.IndexOf(' '); if (indexOfFirstSpace <= 0) { return(false); } values.AuthenticationType = rawValue.Slice(0, indexOfFirstSpace).ToString(); values.Value = rawValue.Slice(indexOfFirstSpace + 1).ToString(); return(true); }