protected override async Task <AuthenticateResult> HandleAuthenticateAsync() { string authorizationHeader = Request.Headers["Authorization"]; if (string.IsNullOrEmpty(authorizationHeader)) { return(AuthenticateResult.NoResult()); } if (!authorizationHeader.StartsWith(Constants.ECommerceScheme + ' ', StringComparison.OrdinalIgnoreCase)) { return(AuthenticateResult.NoResult()); } string credentials = authorizationHeader.Substring(Constants.ECommerceScheme.Length).Trim(); if (string.IsNullOrEmpty(credentials)) { return(AuthenticateResult.Fail("Credentials not provided")); } try { var username = credentials.Split(";")[0]; var password = credentials.Split(";")[1]; var validateCredentialsContext = new ValidateCredentialsContext(Context, Scheme, Options) { Username = username, Password = password }; await Events.ValidateCredentials(validateCredentialsContext, serviceProvider); if (validateCredentialsContext.Result != null && validateCredentialsContext.Result.Succeeded) { var ticket = new AuthenticationTicket(validateCredentialsContext.Principal, Scheme.Name); return(AuthenticateResult.Success(ticket)); } if (validateCredentialsContext.Result != null && validateCredentialsContext.Result.Failure != null) { return(AuthenticateResult.Fail(validateCredentialsContext.Result.Failure)); } return(AuthenticateResult.NoResult()); } catch (Exception ex) { var authenticationFailedContext = new AuthenticationFailedContext(Context, Scheme, Options) { Exception = ex }; await Events.AuthenticationFailed(authenticationFailedContext); if (authenticationFailedContext.Result != null) { return(authenticationFailedContext.Result); } throw; } }
public virtual Task ValidateCredentials(ValidateCredentialsContext context, IServiceProvider serviceProvider) => OnValidateCredentials(context, serviceProvider);