protected override async Task <PipelineState> DoInvoke(IOwinContext context, IOpenIdConnectRequest openIdConnectRequest, ILoginStatistics loginStatistics)
        {
            var recaptchaValidationService = context.Get <IRecaptchaValidationService>();

            var recaptchaChallengeResponse = openIdConnectRequest.GetRecaptchaChallengeResponse();

            if (!string.IsNullOrEmpty(recaptchaChallengeResponse))
            {
                var recaptchaVerificationResponse = await recaptchaValidationService.Validate(recaptchaChallengeResponse, Options);

                if (recaptchaVerificationResponse.Succeeded)
                {
                    context.Set <IRecaptchaContext>(new RecaptchaContext(RecaptchaState.ChallengeSucceeded, recaptchaVerificationResponse.Hostname, recaptchaVerificationResponse.Timestamp));
                    return(PipelineState.Continue);
                }

                context.Set <IRecaptchaContext>(new RecaptchaContext(RecaptchaState.Failed, recaptchaVerificationResponse.Hostname, recaptchaVerificationResponse.Timestamp));
                return(PipelineState.Challenge);
            }

            return(PipelineState.Continue);
        }