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)); }
public ApiKey GetKey(Guid id) { return(_apiKeyRepository.GetKey(id)); }