Ejemplo n.º 1
0
        protected void btnValidate_Click(object sender, EventArgs e)
        {
            String PinCode = this.txtCode.Text.Trim();

            if (!String.IsNullOrEmpty(PinCode))
            {
                var result = TwoFactor.ValidatePIN(TwoFactorCode, PinCode);

                if (result)
                {
                    this.lblValidationResult.Text      = PinCode + " is not a valid 3FA code at time " + xUserTime.LocalTime();
                    this.lblValidationResult.ForeColor = System.Drawing.Color.Green;

                    if (TwoFactorUserItem != null && TwoFactorUserItem.UserID > 0)
                    {
                        //User Login
                        UserController.UserLogin(PortalId, TwoFactorUserItem, PortalSettings.PortalName, WebHelper.UserHost, false);
                        //Redirect return url or index url
                        try { Response.Redirect(GetRedirectUrl()); }
                        finally { }
                    }
                }
                else
                {
                    this.lblValidationResult.Text      = PinCode + " is not a valid 3FA code at time " + xUserTime.LocalTime();
                    this.lblValidationResult.ForeColor = System.Drawing.Color.Red;
                }
            }
            else
            {
                this.lblValidationResult.Text      = "Please enter 3FA code.";
                this.lblValidationResult.ForeColor = System.Drawing.Color.Red;
            }
        }
    public bool ValidateAndSaveGoogleAuth(string code)
    {
        var database = DatabaseContext.Database;
        var user     = Security.CurrentUser;

        try
        {
            var twoFactorAuthenticator = new TwoFactorAuthenticator();
            var all = database.Fetch <TwoFactor>("WHERE userId = @userId",
                                                 new { userId = user.Id });

            var result = all.LastOrDefault(t => t.Key == Constants.GoogleAuthenticatorProviderName);
            if (result != null)
            {
                var isValid = twoFactorAuthenticator.ValidateTwoFactorPIN(result.Value, code);
                if (isValid == false)
                {
                    return(false);
                }

                var tf = new TwoFactor {
                    Confirmed = true, Value = result.Value, UserId = user.Id, Key = Constants.GoogleAuthenticatorProviderName
                };
                var update = database.Update(tf);
                isValid = update > 0;
                return(isValid);
            }
        }
        catch (Exception ex)
        {
            LogHelper.Error <TwoFactorAuthController>("Could not log in with the provided one-time-password", ex);
        }
        return(false);
    }
Ejemplo n.º 3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    if (!(Request.UrlReferrer != null && !String.IsNullOrEmpty(Request.UrlReferrer.ToString())))
                    {
                        Response.Redirect(Globals.LoginURL(UrlReturn, false));
                    }
                    else if (TwoFactorUserItem.LastModifiedOnDate.Ticks != TwoFactorUserTicks)
                    {
                        Response.Redirect(Request.RawUrl);
                    }

                    //Generate Random Secret Key
                    hfSecretKey.Value = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10);

                    //
                    var setupInfo = TwoFactor.GenerateSetupCode("Google Two Factor", TwoFactorUserItem.Username, hfSecretKey.Value, 150, 150);

                    string qrCodeImageUrl       = setupInfo.QrCodeSetupImageUrl;
                    string manualEntrySetupCode = setupInfo.ManualEntryKey;

                    this.imgQrCode.ImageUrl      = qrCodeImageUrl;
                    this.lblManualSetupCode.Text = manualEntrySetupCode;
                }
            }
            catch (Exception ex)
            {
                DotNetNuke.Services.Exceptions.Exceptions.ProcessModuleLoadException(this, ex);
            }
        }
Ejemplo n.º 4
0
        public static bool Validate(string code, string token, DateTime now)
        {
            TwoFactor generator = new TwoFactor(GetSecret(token));

            //generator.GenerateCode(now);
            return(generator.ValidateCode(code, now.ToUniversalTime()));
        }
Ejemplo n.º 5
0
        public void TestMethod1()
        {
            string secret    = TwoFactor.GenerateRandomSecret();
            var    twoFactor = new TwoFactor(secret);

            string x = twoFactor.GenerateCode();

            Assert.AreEqual(x.Length, 6);

            Assert.IsTrue(twoFactor.ValidateCode(x) && !twoFactor.ValidateCode("000000"));
        }
Ejemplo n.º 6
0
        public TwoFactorAuthInfo GoogleAuthenticatorSetupCode()
        {
            var tfa              = new TwoFactorAuthenticator();
            var user             = Security.CurrentUser;
            var accountSecretKey = Guid.NewGuid().ToString();
            var setupInfo        = tfa.GenerateSetupCode(Constants.ApplicationName, user.Email, accountSecretKey, 300, 300);

            var database          = DatabaseContext.Database;
            var twoFactorAuthInfo = new TwoFactorAuthInfo();
            var existingAccount   = database.Fetch <TwoFactor>(string.Format("WHERE userId = {0} AND [key] = '{1}'",
                                                                             user.Id, Constants.GoogleAuthenticatorProviderName));

            if (existingAccount.Any())
            {
                var account = existingAccount.First();
                if (account.Confirmed)
                {
                    return(twoFactorAuthInfo);
                }

                var tf = new TwoFactor {
                    Value = accountSecretKey, UserId = user.Id, Key = Constants.GoogleAuthenticatorProviderName
                };
                var update = database.Update(tf);

                if (update == 0)
                {
                    return(twoFactorAuthInfo);
                }
            }
            else
            {
                var result = database.Insert(new TwoFactor {
                    UserId = user.Id, Key = Constants.GoogleAuthenticatorProviderName, Value = accountSecretKey, Confirmed = false
                });
                if (result is bool == false)
                {
                    return(twoFactorAuthInfo);
                }

                var insertSucces = (bool)result;
                if (insertSucces == false)
                {
                    return(twoFactorAuthInfo);
                }
            }

            twoFactorAuthInfo.Secret          = setupInfo.ManualEntryKey;
            twoFactorAuthInfo.Email           = user.Email;
            twoFactorAuthInfo.ApplicationName = Constants.ApplicationName;

            return(twoFactorAuthInfo);
        }
        public async Task <ActionResult> TwoFactor(TwoFactor two)
        {
            var signInStatus = await SignInManager.TwoFactorSignInAsync(two.Provider, two.Code, true, two.RememberBrowser);

            switch (signInStatus)
            {
            case SignInStatus.Success:
                return(RedirectToAction("Index", "Home"));

            default:
                ModelState.AddModelError("", "Invalid Crendentials");
                return(View(two));
            }
        }
Ejemplo n.º 8
0
        public async Task <TwoFactor> GetToken(string SecretToken)
        {
            TwoFactor twoFactor = new TwoFactor();

            try
            {
                var content = await _Client.GetStringAsync(url + SecretToken);

                twoFactor = JsonConvert.DeserializeObject <TwoFactor>(content);
            }
            catch (Exception e)
            {
                twoFactor.LoginToken = "Your Secret token " + SecretToken + " is not valid";
            }

            return(twoFactor);
        }
        private async void Init()
        {
            twoFactor = await tokenService.GetToken(SecretToken);

            if (twoFactor.LoginToken != "Your Secret token " + SecretToken + " is not valid")
            {
                Enabled = false;
                Token   = "Your Token is: " + twoFactor.LoginToken;
                _timer  = new Timer(TimeSpan.FromSeconds(1), CountDown);

                TotalSeconds = _totalSeconds;
                _timer.Start();
            }
            else
            {
                Token = twoFactor.LoginToken;
            }
        }
        public async Task <IActionResult> LoginTwoStep(TwoFactor twoFactor, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(twoFactor.TwoFactorCode));
            }

            var result = await signInManager.TwoFactorSignInAsync("Email", twoFactor.TwoFactorCode, false, false);

            if (result.Succeeded)
            {
                return(Redirect(returnUrl ?? "/"));
            }
            else
            {
                ModelState.AddModelError("", "Invalid Login Attempt");
                return(View());
            }
        }
Ejemplo n.º 11
0
        public async Task <IActionResult> LoginTwoStep(TwoFactor twoFactor, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(twoFactor.TwoFactorCode));
            }

            var result = await signInManager.TwoFactorSignInAsync("Email", twoFactor.TwoFactorCode, false, false);

            if (result.Succeeded)
            {
                return(Redirect(returnUrl ?? "/"));
            }
            else
            {
                _toastNotification.AddErrorToastMessage(ResponseMessageUtilities.Invalid_Login_Attempt);

                return(View());
            }
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Generate a 2FA secret
 /// </summary>
 /// <param name="token">The user's token</param>
 /// <returns>the secret or null</returns>
 public static Account GenerateSecretForAccount(string token)
 {
     try
     {
         string secret = TwoFactor.GenerateSecret();
         using (var context = new OverstagContext())
         {
             var a = context.Accounts.First(f => f.Token == token);
             a.TwoFactor      = secret;
             a.TwoFactorCodes = string.Join(',', TFA.GenerateBackupCodes());
             context.Accounts.Update(a);
             context.SaveChanges();
             return(a);
         }
     }
     catch
     {
         return(null);
     }
 }
Ejemplo n.º 13
0
        public async Task <IActionResult> LoginTwoStep(TwoFactor twoFactor, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return(View(twoFactor.TwoFactorCode));
            }
            var myuser = await userManager.FindByEmailAsync(twoFactor.Email);

            var result = await userManager.ChangePhoneNumberAsync(myuser, myuser.PhoneNumber, twoFactor.TwoFactorCode);

            if (result.Succeeded)
            {
                if (myuser != null)
                {
                    await signInManager.SignInAsync(myuser, isPersistent : false);
                }
                return(RedirectToAction("Index", "Products"));
            }
            ModelState.AddModelError("", "Invalid Login Attempt");
            return(View());
        }
Ejemplo n.º 14
0
        public async Task <IActionResult> TwoFactor(TwoFactor model)
        {
            var result = await HttpContext.AuthenticateAsync(IdentityConstants.TwoFactorUserIdScheme);

            if (!result.Succeeded)
            {
                ModelState.AddModelError("", "O seu Token expirou!");

                return(View());
            }

            if (ModelState.IsValid)
            {
                var user = await _userManager.FindByIdAsync(result.Principal.FindFirstValue("sub"));

                if (user != null)
                {
                    var isValid = await _userManager.VerifyTwoFactorTokenAsync(user, result.Principal.FindFirstValue("amr"), model.Token);

                    if (isValid == true)
                    {
                        await HttpContext.SignOutAsync(IdentityConstants.TwoFactorUserIdScheme);

                        var claimsPrincipal = await _userClaimsPrincipalFactory.CreateAsync(user);

                        await HttpContext.SignInAsync(IdentityConstants.ApplicationScheme, claimsPrincipal);

                        return(RedirectToAction("About"));
                    }

                    ModelState.AddModelError("", "Token inválido!");

                    return(View());
                }

                ModelState.AddModelError("", "Requisição inválida!");
            }

            return(View());
        }
    public bool ValidateAndSaveGoogleAuth(string code, int userId)
    {
        using (var scope = scopeProvider.CreateScope(autoComplete: true))
        {
            try
            {
                var twoFactorAuthenticator = new TwoFactorAuthenticator();
                var all = scope.Database.Fetch <TwoFactor>("WHERE userId = @userId",
                                                           new { userId = userId });

                var result = all.LastOrDefault(t => t.Key == Constants.GoogleAuthenticatorProviderName);
                if (result != null)
                {
                    var isValid = twoFactorAuthenticator.ValidateTwoFactorPIN(result.Value, code);
                    if (isValid == false)
                    {
                        return(false);
                    }

                    var tf = new TwoFactor
                    {
                        Confirmed = true, Value = result.Value, UserId = userId,
                        Key       = Constants.GoogleAuthenticatorProviderName
                    };
                    var update = scope.Database.Update(tf);
                    isValid = update > 0;
                    return(isValid);
                }
            }
            catch (Exception ex)
            {
                Current.Logger.Error(typeof(TwoFactorService), ex);
            }

            return(false);
        }
    }
Ejemplo n.º 16
0
        public HttpResponseMessage GetToken(string token)
        {
            TwoFactorService.TwoFactor_Service service = new TwoFactorService.TwoFactor_Service();
            service.Url = @"http://*****:*****@"DESKTOP-AOPOAEF\DENNIS", "070886Denz");

            //service.UseDefaultCredentials = true;
            service.Credentials = networkCredential;
            List <TwoFactorService.TwoFactor_Filter> filterArray = new List <TwoFactorService.TwoFactor_Filter>();

            TwoFactorService.TwoFactor_Filter tokenFilter = new TwoFactorService.TwoFactor_Filter();
            tokenFilter.Field    = TwoFactorService.TwoFactor_Fields.Secret_Token;
            tokenFilter.Criteria = token;
            filterArray.Add(tokenFilter);

            TwoFactorService.TwoFactor[] list = service.ReadMultiple(filterArray.ToArray(), null, 1);
            if (list.Count() == 0)
            {
                HttpResponseMessage response2 = Request.CreateResponse(HttpStatusCode.NotFound);
                return(response2);
            }
            TwoFactor twoFactor   = new TwoFactor();
            Random    random      = new Random();
            int       tempToken   = random.Next(10000, 88888) + DateTime.Now.Second;
            string    secretToken = tempToken.ToString();

            list[0].Login_Token = secretToken;
            service.Update(ref list[0]);
            twoFactor.UserName    = list[0].User_ID;
            twoFactor.SecretToken = list[0].Secret_Token;
            twoFactor.LoginToken  = list[0].Login_Token;
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);

            response.Content = new StringContent(JsonConvert.SerializeObject(twoFactor), Encoding.UTF8, "application/json");
            return(response);
        }
    public TwoFactorAuthInfo GetExistingAccount(int userId, string googleAuthenticatorProviderName, string accountSecretKey)
    {
        var twoFactorAuthInfo = new TwoFactorAuthInfo();

        using (var scope = scopeProvider.CreateScope(autoComplete: true))
        {
            try
            {
                var existingAccount = scope.Database.Fetch <TwoFactor>(string.Format("WHERE userId = {0} AND [key] = '{1}'",
                                                                                     userId, Constants.GoogleAuthenticatorProviderName));

                if (existingAccount.Any())
                {
                    var account = existingAccount.First();
                    if (account.Confirmed)
                    {
                        return(twoFactorAuthInfo);
                    }

                    var tf = new TwoFactor {
                        Value = accountSecretKey, UserId = userId, Key = Constants.GoogleAuthenticatorProviderName
                    };
                    var update = scope.Database.Update(tf);

                    if (update == 0)
                    {
                        return(twoFactorAuthInfo);
                    }
                }
                else
                {
                    var result = scope.Database.Insert(new TwoFactor {
                        UserId = userId, Key = Constants.GoogleAuthenticatorProviderName, Value = accountSecretKey, Confirmed = false
                    });
                    if (result is bool == false)
                    {
                        return(twoFactorAuthInfo);
                    }

                    var insertSucces = (bool)result;
                    if (insertSucces == false)
                    {
                        return(twoFactorAuthInfo);
                    }
                }
            }
            catch (Exception e)
            {
                var result = scope.Database.Insert(new TwoFactor {
                    UserId = userId, Key = Constants.GoogleAuthenticatorProviderName, Value = accountSecretKey, Confirmed = false
                });
                if (result is bool == false)
                {
                    return(twoFactorAuthInfo);
                }

                var insertSucces = (bool)result;
                if (insertSucces == false)
                {
                    return(twoFactorAuthInfo);
                }
                //throw;
            }

            return(twoFactorAuthInfo);
        }
    }
Ejemplo n.º 18
0
 /// <summary>
 /// Generates a new 2fa secret
 /// </summary>
 /// <returns>A new secret</returns>
 public static string GenerateSecret() => TwoFactor.GenerateSecret();