protected override async Task <AuthenticateResult> HandleAuthenticateAsync()
        {
            if (!this.Request.Headers.TryGetValue(_API_KEY_HEADER_NAME, out var apiKeyHeaderValues))
            {
                return(AuthenticateResult.NoResult());
            }

            if (apiKeyHeaderValues.Count == 0)
            {
                return(AuthenticateResult.NoResult());
            }

            var keyHeader = apiKeyHeaderValues[0];

            if (string.IsNullOrWhiteSpace(keyHeader))
            {
                return(AuthenticateResult.NoResult());
            }

            var key = await _repo.GetKey(keyHeader);

            if (key == null)
            {
                return(AuthenticateResult.Fail("Invalid API key provided"));
            }

            var claims = new List <Claim>
            {
                new Claim(ClaimTypes.Name, key.User.Username),
                new Claim(ClaimTypes.NameIdentifier, key.UserId.ToString())
            };
            var identity   = new ClaimsIdentity(claims, Options.AuthenticationType);
            var identities = new List <ClaimsIdentity> {
                identity
            };
            var principal = new ClaimsPrincipal(identities);
            var ticket    = new AuthenticationTicket(principal, Options.Scheme);

            return(AuthenticateResult.Success(ticket));
        }
Exemple #2
0
 public ApiKey GetKey(Guid id)
 {
     return(_apiKeyRepository.GetKey(id));
 }