Beispiel #1
0
        protected override async Task <AuthenticateResult> HandleAuthenticateAsync()
        {
            if (!Request.Headers.TryGetValue(HeaderNames.Authorization, out var headerValue))
            {
                return(AuthenticateResult.NoResult());
            }

            if (!TryGetKey(headerValue, out var key))
            {
                return(AuthenticateResult.NoResult());
            }

            var apiKey = await _keyRepository.GetByKey(key);

            if (apiKey is null)
            {
                return(AuthenticateResult.Fail("Invalid key"));
            }

            var identity  = new ClaimsIdentity(apiKey.Claims, Options.AuthenticationType);
            var principal = new ClaimsPrincipal(identity);
            var ticket    = new AuthenticationTicket(principal, Options.AuthenticationScheme);

            return(AuthenticateResult.Success(ticket));
        }