Beispiel #1
0
        /// <summary>
        /// Try to authenticate the user.
        /// </summary>
        /// <param name="digestHeaders">The digest headers.</param>
        /// <param name="privateKey">The private key.</param>
        /// <param name="nonceTimeOut">The nonce time out.</param>
        /// <param name="sequence">The sequence.</param>
        /// <param name="userAuth">The user auth.</param>
        /// <returns>The <see cref="bool"/>.</returns>
        public bool TryAuthenticate(
            Dictionary <string, string> digestHeaders,
            string privateKey,
            int nonceTimeOut,
            string sequence,
            out IUserAuth userAuth)
        {
            userAuth = this.GetUserAuthByUserName(digestHeaders["username"]);
            if (userAuth == null)
            {
                return(false);
            }

            var digestHelper = new DigestAuthFunctions();

            if (digestHelper.ValidateResponse(digestHeaders, privateKey, nonceTimeOut, userAuth.DigestHa1Hash, sequence))
            {
                this.RecordSuccessfulLogin(userAuth);

                return(true);
            }
            else
            {
                this.RecordInvalidLoginAttempt(userAuth);

                userAuth = null;

                return(false);
            }
        }
Beispiel #2
0
        public IUserAuth UpdateUserAuth(IUserAuth existingUser, IUserAuth newUser, string password)
        {
            newUser.ValidateNewUser(password);

            AssertNoExistingUser(mongoDatabase, newUser, existingUser);

            var hash = existingUser.PasswordHash;
            var salt = existingUser.Salt;

            if (password != null)
            {
                var saltedHash = HostContext.Resolve <IHashProvider>();
                saltedHash.GetHashAndSaltString(password, out hash, out salt);
            }
            // If either one changes the digest hash has to be recalculated
            var digestHash = existingUser.DigestHa1Hash;

            if (password != null || existingUser.UserName != newUser.UserName)
            {
                var digestHelper = new DigestAuthFunctions();
                digestHash = digestHelper.CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
            }
            newUser.Id            = existingUser.Id;
            newUser.PasswordHash  = hash;
            newUser.Salt          = salt;
            newUser.DigestHa1Hash = digestHash;
            newUser.CreatedDate   = existingUser.CreatedDate;
            newUser.ModifiedDate  = DateTime.UtcNow;
            SaveUser(newUser);

            return(newUser);
        }
        public UserAuth UpdateUserAuth(UserAuth existingUser, UserAuth newUser, string password)
        {
            ValidateNewUser(newUser, password);

            return(dbFactory.Run(db =>
            {
                AssertNoExistingUser(db, newUser, existingUser);

                var hash = existingUser.PasswordHash;
                var salt = existingUser.Salt;
                if (password != null)
                {
                    passwordHasher.GetHashAndSaltString(password, out hash, out salt);
                }
                // If either one changes the digest hash has to be recalculated
                var digestHash = existingUser.DigestHa1Hash;
                if (password != null || existingUser.UserName != newUser.UserName)
                {
                    var digestHelper = new DigestAuthFunctions();
                    digestHash = digestHelper.CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
                }
                newUser.Id = existingUser.Id;
                newUser.PasswordHash = hash;
                newUser.Salt = salt;
                newUser.DigestHa1Hash = digestHash;
                newUser.CreatedDate = existingUser.CreatedDate;
                newUser.ModifiedDate = DateTime.UtcNow;

                db.Save(newUser);

                return newUser;
            }));
        }
Beispiel #4
0
        public UserAuth CreateUserAuth(UserAuth newUser, string password)
        {
            ValidateNewUser(newUser, password);

            AssertNoExistingUser(newUser);

            var    saltedHash = new SaltedHash();
            string salt;
            string hash;

            saltedHash.GetHashAndSaltString(password, out hash, out salt);
            var digestHelper = new DigestAuthFunctions();

            newUser.DigestHA1Hash = digestHelper.CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
            newUser.PasswordHash  = hash;
            newUser.Salt          = salt;
            newUser.CreatedDate   = DateTime.UtcNow;
            newUser.ModifiedDate  = newUser.CreatedDate;

            using (var session = _documentStore.OpenSession())
            {
                session.Store(newUser);
                session.SaveChanges();
            }

            return(newUser);
        }
        public UserAuth CreateUserAuth(UserAuth newUser, string password)
        {
            ABUserAuth ab_newuser = newUser.TranslateTo <ABUserAuth>();

            ValidateNewUser(ab_newuser, password);

            string salt;
            string hash;

            passwordHasher.GetHashAndSaltString(password, out hash, out salt);

            return(dbFactory.Run(db =>
            {
                AssertNoExistingUser(db, ab_newuser);

                var digestHelper = new DigestAuthFunctions();
                ab_newuser.DigestHa1Hash = digestHelper.CreateHa1(ab_newuser.UserName, DigestAuthProvider.Realm, password);
                ab_newuser.PasswordHash = hash;
                ab_newuser.Salt = salt;
                ab_newuser.CreatedDate = DateTime.UtcNow;
                ab_newuser.ModifiedDate = newUser.CreatedDate;

                db.Insert(ab_newuser);

                ab_newuser = db.GetById <ABUserAuth>(db.GetLastInsertId());
                return ab_newuser.TranslateTo <UserAuth>();
            }));
        }
Beispiel #6
0
        public bool TryAuthenticate(Dictionary <string, string> digestHeaders, string privateKey, int nonceTimeOut, string sequence, out IUserAuth userAuth)
        {
            //userId = null;
            userAuth = GetUserAuthByUserName(digestHeaders["username"]);
            if (userAuth == null)
            {
                return(false);
            }

            var digestHelper = new DigestAuthFunctions();

            return(digestHelper.ValidateResponse(digestHeaders, privateKey, nonceTimeOut, userAuth.DigestHa1Hash, sequence));
        }
Beispiel #7
0
        public bool TryAuthenticate(Dictionary <string, string> digestHeaders, string PrivateKey, int NonceTimeOut, string sequence, out UserAuth userAuth)
        {
            userAuth = GetUserAuthByUserName(digestHeaders["username"]);
            if (userAuth == null)
            {
                return(false);
            }

            var digestHelper = new DigestAuthFunctions();

            if (digestHelper.ValidateResponse(digestHeaders, PrivateKey, NonceTimeOut, userAuth.DigestHA1Hash, sequence))
            {
                return(true);
            }
            userAuth = null;
            return(false);
        }
Beispiel #8
0
        public async Task <IUserAuth> UpdateUserAuthAsync(IUserAuth existingUser, IUserAuth newUser, string password, CancellationToken token = default)
        {
            ValidateNewUser(newUser, password);

            await AssertNoExistingUserAsync(newUser, existingUser, token);

            //DynamoDb does not allow null hash keys on Global Indexes
            //Workaround by populating UserName with Email when null
            if (newUser.UserName == null)
            {
                newUser.UserName = newUser.Email;
            }

            if (this.LowerCaseUsernames)
            {
                newUser.UserName = newUser.UserName.ToLower();
            }

            var hash = existingUser.PasswordHash;
            var salt = existingUser.Salt;

            if (password != null)
            {
                HostContext.Resolve <IHashProvider>().GetHashAndSaltString(password, out hash, out salt);
            }

            var digestHash = existingUser.DigestHa1Hash;

            if (password != null || existingUser.UserName != newUser.UserName)
            {
                digestHash = new DigestAuthFunctions().CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
            }

            newUser.Id            = existingUser.Id;
            newUser.PasswordHash  = hash;
            newUser.Salt          = salt;
            newUser.DigestHa1Hash = digestHash;
            newUser.CreatedDate   = existingUser.CreatedDate;
            newUser.ModifiedDate  = DateTime.UtcNow;

            await Db.PutItemAsync(Sanitize((TUserAuth)newUser), token : token);

            return(newUser);
        }
Beispiel #9
0
        public IUserAuth CreateUserAuth(IUserAuth newUser, string password)
        {
            UserEntry user = newUser as UserEntry;

            ValidateNewUser(user, password);
            AssertNoExistingUser(user);

            var    saltedHash = HostContext.Resolve <IHashProvider>();
            string salt;
            string hash;

            saltedHash.GetHashAndSaltString(password, out hash, out salt);

            user.PartitionKey = Guid.NewGuid().ToString();
            user.RowKey       = newUser.UserName;
            user.RowKey       = TableEntityHelper.RemoveDiacritics(user.RowKey);
            user.RowKey       = TableEntityHelper.ToAzureKeyString(user.RowKey);

            //user.Id = 0;
            user.PasswordHash = hash;
            user.Salt         = salt;
            var digestHelper = new DigestAuthFunctions();

            user.DigestHa1Hash = digestHelper.CreateHa1(user.UserName, DigestAuthProvider.Realm, password);
            user.CreatedDate   = DateTime.UtcNow;
            user.ModifiedDate  = user.CreatedDate;

            //var userId = user.Id.ToString(CultureInfo.InvariantCulture);
            //if (!newUser.UserName.IsNullOrEmpty())
            //{
            //    redis.SetEntryInHash(IndexUserNameToUserId, newUser.UserName, userId);
            //}
            //if (!newUser.Email.IsNullOrEmpty())
            //{
            //    redis.SetEntryInHash(IndexEmailToUserId, newUser.Email, userId);
            //}
            SaveUserAuth(user);

            return(user);
        }
Beispiel #10
0
        public IUserAuth CreateUserAuth(IUserAuth newUser, string password)
        {
            newUser.ValidateNewUser(password);

            AssertNoExistingUser(mongoDatabase, newUser);

            var    saltedHash = HostContext.Resolve <IHashProvider>();
            string salt;
            string hash;

            saltedHash.GetHashAndSaltString(password, out hash, out salt);
            var digestHelper = new DigestAuthFunctions();

            newUser.DigestHa1Hash = digestHelper.CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
            newUser.PasswordHash  = hash;
            newUser.Salt          = salt;
            newUser.CreatedDate   = DateTime.UtcNow;
            newUser.ModifiedDate  = newUser.CreatedDate;

            SaveUser(newUser);
            return(newUser);
        }
Beispiel #11
0
        public UserAuth UpdateUserAuth(UserAuth existingUser, UserAuth newUser, string password = null)
        {
            ValidateNewUserWithoutPassword(newUser);

            AssertNoExistingUser(newUser, existingUser);

            var hash = existingUser.PasswordHash;
            var salt = existingUser.Salt;

            if (password != null)
            {
                var saltedHash = new SaltedHash();
                saltedHash.GetHashAndSaltString(password, out hash, out salt);
            }
            // If either one changes the digest hash has to be recalculated
            var digestHash = existingUser.DigestHA1Hash;

            if (password != null || existingUser.UserName != newUser.UserName)
            {
                var digestHelper = new DigestAuthFunctions();
                digestHash = digestHelper.CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
            }
            newUser.Id            = existingUser.Id;
            newUser.PasswordHash  = hash;
            newUser.Salt          = salt;
            newUser.DigestHA1Hash = digestHash;
            newUser.CreatedDate   = existingUser.CreatedDate;
            newUser.ModifiedDate  = DateTime.UtcNow;

            using (var session = _documentStore.OpenSession())
            {
                session.Store(newUser);
                session.SaveChanges();
            }

            return(newUser);
        }
		public bool TryAuthenticate(Dictionary<string, string> digestHeaders, string PrivateKey, int NonceTimeOut, string sequence, out IUserAuth userAuth)
		{
			//userId = null;
			userAuth = GetUserAuthByUserName(digestHeaders["username"]);
			if (userAuth == null) return false;

			var digestHelper = new DigestAuthFunctions();
			if (digestHelper.ValidateResponse(digestHeaders, PrivateKey, NonceTimeOut, userAuth.DigestHa1Hash, sequence))
			{
				//userId = userAuth.Id.ToString(CultureInfo.InvariantCulture);
				return true;
			}
			userAuth = null;
			return false;
		}
        public IUserAuth UpdateUserAuth(IUserAuth existingUser, IUserAuth newUser, string password)
		{
			ValidateNewUser(newUser, password);

			AssertNoExistingUser(mongoDatabase, newUser, existingUser);

			var hash = existingUser.PasswordHash;
			var salt = existingUser.Salt;
			if (password != null)
			{
				var saltedHash = new SaltedHash();
				saltedHash.GetHashAndSaltString(password, out hash, out salt);
			}
			// If either one changes the digest hash has to be recalculated
			var digestHash = existingUser.DigestHa1Hash;
			if (password != null || existingUser.UserName != newUser.UserName)
			{
				var digestHelper = new DigestAuthFunctions();
				digestHash = digestHelper.CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
			}
			newUser.Id = existingUser.Id;
			newUser.PasswordHash = hash;
			newUser.Salt = salt;
			newUser.DigestHa1Hash = digestHash;
			newUser.CreatedDate = existingUser.CreatedDate;
			newUser.ModifiedDate = DateTime.UtcNow;
			SaveUser(newUser);

			return newUser;
		}
        public IUserAuth CreateUserAuth(IUserAuth newUser, string password)
		{
			ValidateNewUser(newUser, password);

			AssertNoExistingUser(mongoDatabase, newUser);

			var saltedHash = new SaltedHash();
			string salt;
			string hash;
			saltedHash.GetHashAndSaltString(password, out hash, out salt);
			var digestHelper = new DigestAuthFunctions();
			newUser.DigestHa1Hash = digestHelper.CreateHa1(newUser.UserName, DigestAuthProvider.Realm, password);
			newUser.PasswordHash = hash;
			newUser.Salt = salt;
			newUser.CreatedDate = DateTime.UtcNow;
			newUser.ModifiedDate = newUser.CreatedDate;

			SaveUser(newUser);
			return newUser;
		}