Блокировка выход пользователя в поставщике ASP .Net пользовательского членства

голоса
6

Я должен был создать пользовательского поставщика членства для моего текущего проекта ASP .Net, чтобы вписываться в нашей схеме базы данных, и у меня возникают проблемы, настраивая его в режим блокировки пользователя, если они получают свой пароль неправильно три раза, так как поддерживается стандартные провайдеры.

Это то, что мне нужно реализовать себя, или она должна быть поддержана по своей сути?

У меня нет коды, который специально занимается с ним (и ни один из интерфейса членов, кажется, справиться с ней конкретно), но если мне нужно реализовать это сам, как я могу идти об информировании пользователя они заблокированные? Нужно ли мне поднимать какие-то исключения в ValidateUser?

Решение

Позор я не могу отметить два ответа, ссылки, представленные Дэйв R дают отличную глубокий взгляд на то, как членство работает, и что Zhaph отметил, было то, что я в конечном итоге делаю, обработки заблокированной логики в поставщике пользовательского членства.

Затем я обработал состояние ошибки с помощью LoginError события элемента управления Входа и проверил там, чтобы увидеть, если пользователь был заблокирован, чтобы показать соответствующее сообщение об ошибке.

Задан 10/12/2008 в 11:17
источник пользователем
На других языках...                            


4 ответов

голоса
7

Скотт Митчелл написал прекрасную серию учебников на сайте ASP.NET. Эта ссылка содержит информацию о создании пользовательского поставщика и обсуждает стопорную логику:

http://www.asp.net/LEARN/security/tutorial-06-cs.aspx

Там также нет встроенный метод, чтобы разблокировать счета (т.е. вы должны сделать это с помощью инструментов базы данных, если вы используете что-то похожее на SqlMembershipProvider). Скотт также написал статью о создании пользовательского интерфейса для управления этим, которые вы можете найти здесь:

http://www.asp.net/LEARN/security/tutorial-14-vb.aspx

Я действительно рекомендую прочитать всю серию. Скотт отличный коммуникатор.

Надеюсь, это поможет.

Ответил 10/12/2008 в 14:48
источник пользователем

голоса
3

Это то, что вы должны написать сами.

Схема базы данных по умолчанию имеет следующие столбцы в таблице aspnet_Membership:

IsLockedOut
FailedPasswordAttemptCount
FailedPasswordAttemptWindowStart

Счетчик попыток будет увеличен на каждой неудачной попытки в пределах окна попытки, а время первой неудачной попытки сохраняется в начальном столбце окна после того, как FailedPasswordAttemptCount равняется maxInvalidPasswordAttempts от конфигурации IsLockedOut устанавливается.

Как утверждает Михель, ваш метод ValidateUser нужно будет проверить эти значения на основе настроек в конфигурации поставщика - по умолчанию они являются:

maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"

После того, как пользователь имел максимальные попытки входа в систему, вы должны убедиться, что вы установили MembershipUser.IsLockedOut устанавливается от поставщика - то вы можете проверить, что значение и вести себя соответствующим образом - если вы используете элементы управления по умолчанию Логин, это значение, вероятно, уже проверены на вас.

Ответил 10/12/2008 в 14:56
источник пользователем

голоса
2

Репликация условия, которые приводят к заблокируется (слишком много плохих попыток входа в систему). Поскольку поставщики членства делают поездку в их бэкэнд каждый раз, имеет смысл ограничить этот подход к поставщикам с разумным количеством MaxInvalidPasswordAttempts.

if (0 < Membership.MaxInvalidPasswordAttempts && Membership.MaxInvalidPasswordAttempts < 100)
       {
                for(int i = 0; i <= Membership.MaxInvalidPasswordAttempts; i++)
                {
                    Membership.ValidateUser(userName, "jfdlsjflksjlkfjsdlkfjsdl");
                }
        }
Ответил 14/01/2010 в 13:40
источник пользователем

голоса
0

В вашем настраиваемого поставщика членства, вы должны реализовать функцию ValidateUser. Там вы не только проверить, если имя пользователя и пароль действительны, но вы также получить количество недействительных попыток ввода пароля и т.д. из хранилища данных. Если имя пользователя / пароль действителен, сброс пароля кол попытка, otherelse увеличить количество попытки. SqlMembershipProvider также хранит DateTime LastAttempt, так что вы не можете BruteForce вам путь, потому что вы не разрешается создавать в течение определенного периода времени.

Ответил 10/12/2008 в 14:15
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more