Example #1
0
        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);
        }