protected override async Task <AuthenticateResult> HandleAuthenticateAsync() { try { if (!Request.Headers.ContainsKey("Authorization")) { return(AuthenticateResult.NoResult()); } if (!AuthenticationHeaderValue.TryParse(Request.Headers["Authorization"], out AuthenticationHeaderValue headerValue)) { return(AuthenticateResult.NoResult()); } if (!Enums.AuthenticationSchemes.Basic.Equals(headerValue.Scheme, StringComparison.OrdinalIgnoreCase)) { return(AuthenticateResult.NoResult()); } byte[] headerValueBytes = Convert.FromBase64String(headerValue.Parameter); string userAndPassword = Encoding.UTF8.GetString(headerValueBytes); string[] parts = userAndPassword.Split(':', StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 2) { return(AuthenticateResult.Fail("Invalid Basic authentication header")); } var authParams = new Models.AuthenticationParameters { Login = parts[0], Password = parts[1] }; var user = await _authenticationService.Authentication(Options, authParams); if (user != null) { var claims = new[] { new Claim(ClaimTypes.Name, user.Login), new Claim(ClaimTypes.Role, user.Role) }; var identity = new ClaimsIdentity(claims, Scheme.Name); var principal = new ClaimsPrincipal(identity); var ticket = new AuthenticationTicket(principal, Scheme.Name); return(AuthenticateResult.Success(ticket)); } return(AuthenticateResult.Fail("Invalid login or password")); } catch (Exception e) { return(AuthenticateResult.Fail(e.Message)); } }
protected override async Task <AuthenticateResult> HandleAuthenticateAsync() { try { if (!Request.Headers.ContainsKey("Authorization")) { return(AuthenticateResult.NoResult()); } if (!AuthenticationHeaderValue.TryParse(Request.Headers["Authorization"], out AuthenticationHeaderValue headerValue)) { return(AuthenticateResult.NoResult()); } if (!Enums.AuthenticationSchemes.HMAC.Equals(headerValue.Scheme, StringComparison.OrdinalIgnoreCase)) { return(AuthenticateResult.NoResult()); } string[] parts = headerValue.Parameter.Split(':', StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 3) { return(AuthenticateResult.Fail("Invalid HMAC authentication header")); } var authParams = new Models.AuthenticationParameters { Login = parts[0], Hash = parts[1], TimeStamp = parts[2] }; var user = await _authenticationService.Authentication(Options, authParams); if (user != null) { var claims = new[] { new Claim(ClaimTypes.Name, user.Login), new Claim(ClaimTypes.Role, user.Role) }; var identity = new ClaimsIdentity(claims, Scheme.Name); var principal = new ClaimsPrincipal(identity); var ticket = new AuthenticationTicket(principal, Scheme.Name); return(AuthenticateResult.Success(ticket)); } return(AuthenticateResult.Fail("Failed authentication")); } catch (Exception e) { return(AuthenticateResult.Fail(e.Message)); } }
protected override async Task <AuthenticateResult> HandleAuthenticateAsync() { try { if (!Request.Headers.ContainsKey("Authorization")) { return(AuthenticateResult.NoResult()); } if (!AuthenticationHeaderValue.TryParse(Request.Headers["Authorization"], out AuthenticationHeaderValue headerValue)) { return(AuthenticateResult.NoResult()); } if (!Enums.AuthenticationSchemes.Bearer.Equals(headerValue.Scheme, StringComparison.OrdinalIgnoreCase) || string.IsNullOrWhiteSpace(headerValue.Parameter)) { return(AuthenticateResult.NoResult()); } var authParams = new Models.AuthenticationParameters { Token = headerValue.Parameter }; var user = await _authenticationService.Authentication(Options, authParams); if (user != null) { var claims = new[] { new Claim(ClaimTypes.Name, user.Login), new Claim(ClaimTypes.Role, user.Role) }; var identity = new ClaimsIdentity(claims, Scheme.Name); var principal = new ClaimsPrincipal(identity); var ticket = new AuthenticationTicket(principal, Scheme.Name); return(AuthenticateResult.Success(ticket)); } return(AuthenticateResult.Fail("Failed authentication")); } catch (Exception e) { return(AuthenticateResult.Fail(e.Message)); } }